Вниз
Скачать: CL | DM;

Дозапись в 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
3-1084863521
Dark Man
2004-05-18 10:58
2004.06.06
А генераторы ихде???


14-1084785001
olookin
2004-05-17 13:10
2004.06.06
Предусматривает ли КЗОТ?


1-1084669856
Алекс А
2004-05-16 05:10
2004.06.06
Какие есть библиотеки для работы с числами размером до 25 знаков?


3-1084777634
Mitrofan
2004-05-17 11:07
2004.06.06
Динамический отчет


14-1084713446
Gero
2004-05-16 17:17
2004.06.06
Вкладка "Безопасность" в XP.




   Наверх