Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: 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 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
3-1084416711
JetMan
2004-05-13 06:51
2004.06.06
DBGridEh


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


14-1085121676
Bunny
2004-05-21 10:41
2004.06.06
IDE not Found.


1-1085591498
GEN++
2004-05-26 21:11
2004.06.06
Передача строки в/из DLL


3-1084541484
vv_fran
2004-05-14 17:31
2004.06.06
Глюк уникального ключа в FireBird 1.03