Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизДозапись в PByte Найти похожие ветки
← →
Leaner © (2004-05-22 10:42) [0]Здравствуйте ! Подскажите, пожалуйста.
Есть PByte1:PByte; , указывающий на размер структуры,
и PByte2, указывающий на саму структуру.
Как бы их «слить» в один PByte ?
Спасибо.
← →
jack128 © (2004-05-22 10:46) [1]Что означает "слить"?
← →
AlexG © (2004-05-22 10:50) [2]Объяви структуру, в которой есть поле РАЗМЕР. При создании экземпляра инициализируй это поле размером структуры. Иначе, работая с памятью: выдели блок, достаточный для помещения и того и того, скопируй туда данные...
← →
Leaner © (2004-05-22 11:20) [3]Извините, плохо обьяснил.
Я последовательно получаю св-ва объекта.
//Это моя процедура
GetObjectProp(Handle:THandle;Prop:DWord;var pData:PByte;var szData:DWord);
//Если надо сохранять в файле, то пишу:
BlockWrite(Dist,szData,SizeOf(DWord));
BlockWrite(Dist,pData^,szData);
//Если в потоке, то
MStream.Write(szData,SizeOf(DWord));
MStream.Write(pData^,szData);:
Свойств много, и все их надо так сохранить.
Дело в том, что заранее не известно где надо сохранять.
Вот я и подумал, временно, записывать все в PByte или что-нибудь подобном.
Только не знаю как.
← →
AlexG © (2004-05-22 11:26) [4]Еслиизвестно сколько, создай блок памяти и копируй в него просто данные. А потом делай с этим блоком что нужно.
← →
Leaner © (2004-05-22 11:33) [5]Нет, не известно.
Одно свойство может, например, указывать на наличие
или отсутствие других, их кол-во, и т.д. и т.п.
← →
AlexG © (2004-05-22 11:39) [6]Можно и при не известном размере. Например, создай дин.массив байт, или целых (какой приятнее). Меняй размер по необходимости, а мотом копируй блоки памяти. Или в ручную все делай.
← →
Leaner © (2004-05-22 14:35) [7]Объясните пожалуйста, как надо правильно делать.
// Так все в порядке:
var
ArrByte:array of Byte;
function ArrayWrite(pData:PByte;szData:DWord):Boolean;
var
szArr:DWord;
begin
szArr:=Length(ArrByte);
SetLength(ArrByte,szArr+SizeOf(DWord)+szData);
CopyMemory(@ArrByte[szArr],@szData,SizeOf(DWord));
CopyMemory(@ArrByte[szArr+SizeOf(DWord)],pData,szData);
end;
// А так – ругается на несовместимые типы
function ArrayWrite1(var ArrByte:array of Byte;pData:PByte;szData:DWord):Boolean;
var
szArr:DWord;
begin
szArr:=Length(ArrByte);
SetLength(ArrByte,szArr+SizeOf(DWord)+szData);<<---Incompatible types
CopyMemory(@ArrByte[szArr],@szData,SizeOf(DWord));
CopyMemory(@ArrByte[szArr+SizeOf(DWord)],pData,szData);
end;
← →
Anatoly Podgoretsky © (2004-05-22 14:41) [8]ArrByte:array of Byte это открытый а не динамический массив, создай тип и его используй
← →
Leaner © (2004-05-22 14:47) [9]Всем большое спасибо !
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.027 c