Что нового

[DLLStruct] Импорт и последующий экспорт содержания файлов

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Столкнулся с проблемой: не могу верно положить данные в DllStruct, а затем извлечь.


$_hStack[$i][1] - Содержит обработанный файл.в HEX.
Код:
MsgBox(0,0,$_hStack[$i][1]) ;Оригинал

Local $_name = _HexToString($_hStack[$i][0]) ;_Crypt_EncryptData(,4,$CALG_DES)
Local $_body = _HexToString($_hStack[$i][1])
Local $_sname = StringLen($_name)
Local $_sbody = StringLen($_body)

Local $_Bin_PackName = DllStructCreate('char Data[' & $_sname & '];')
Local $_Bin_PackBody = DllStructCreate('char Data[' & $_sbody & '];')

DllStructSetData($_Bin_PackName,"Data", $_name)
DllStructSetData($_Bin_PackBody,"Data", $_body)

MsgBox(0,0,_StringToHex(DllStructGetData($_Bin_PackBody,"Data"))) ;Результат после извлечения(обрезанный)

И после извлечения текст "обрезается".
Изменение границ размера не дает никакого результата.

Надеюсь это не ограничение?
Заранее спасибо.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: [DLLStruct] Хранение данных

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[DLLStruct] Хранение данных" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
1. Все строки в API должны заканчиваться символом завершения - Chr(0). Из этого следует, что размер строки в структуре должен быть StringLen() + 1.

2. Зачем вам здесь структуры? Это явно неправильное их использование.

3. Т.к. пример нерабочий, то могу только предположить, что проблема в этом

Код:
Local $_name = _HexToString($_hStack[$i][0])


То есть $_hStack[$i][0] где-то содержит 0, что при преобразовании в строку дает символ с кодом 0 - Chr(0), что, в свою очередь, означает конец строки. Все, что находится после этого символа, не выводится. На лицо неверное использование данных.
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Yashied [?]
2. Зачем вам здесь структуры? Это явно неправильное их использование.
Вполне возможно, но мне так наиболее удобно записывать данные в один файл, а затем извлекать. Идею подчерпнул кстати из вашего проекта "Package".
Спасибо, поищу тогда алгоритм, который на выходе не будет выкидывать NULL.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
firex сказал(а):
Спасибо, поищу тогда алгоритм, который на выходе не будет выкидывать NULL.

Да нет, вы не поняли. Алгоритм тут совершенно ни при чем. Я говорил, что вы неправильно используете данные. Не нужно двоичные данные преобразовывать в строку, пишите в файл именно двоичные данные. Да и функция _HexToString() предназначена совершенно для другого.
 
Верх