Главная страница
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.057 c
1-1085640097
Александр
2004-05-27 10:41
2004.06.06
TCanvas


3-1084790237
Klerk
2004-05-17 14:37
2004.06.06
Почему он не находит поле?


4-1083263927
Dummy
2004-04-29 22:38
2004.06.06
Какой WM_* соответствует VLC овскому...


1-1085154008
Kiloper
2004-05-21 19:40
2004.06.06
Программа для разных разрешений экрана


1-1085645146
Serg7077
2004-05-27 12:05
2004.06.06
Добавить лист в Excell