Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.18;
Скачать: CL | DM;

Вниз

Работа с указателем   Найти похожие ветки 

 
Erik ©   (2002-11-05 18:35) [0]

Есть две процедуры для конвертации record в вариант
DataToVariant(Const pTKParams: PRTKParams; Var VData:OleVariant);
VariantToData(Var VData: OleVariant; Const pTKParams:PRTKParams);
pTKParams - описывается так
TArrayID = packed Array of Cardinal;

RTKParams = packed record
Kuupaev : Integer; //TDateTime;
Aeg : Integer;
TkAeg : Integer;
VAegID : Integer;
Size: Integer;
TeenID: TArrayID;
end;
PRTKParams = ^RTKParams;
Сложность состоит в копирывании TeenID
Копирую в 2 этапа DataToVariant(pTKParams, VData);
Size := SizeOf(pTKParams^)-SizeOf(pTKParams^.TeenID);
ASize := pTKParams^.Size*SizeOf(Cardinal);

VData := VarArrayCreate([0,Size+ASize-1],varByte);
PData := VarArrayLock(VData);
try
Move(pTKParams^,PData^,Size); - это правильно
Inc(PData,Size); - вот это вопрос??????
Move(pTKParams^.TeenID[0],PData^,ASize); - source правильный
но указатель кажется нетуда смотрит.
finally
VarArrayUnLock(VData);
end;
Помогите правильно скопировать запись и получить назад.


 
Набережных С.   (2002-11-05 21:18) [1]

Если PData: PByte, то все правильно.


 
Erik ©   (2002-11-06 12:52) [2]

Это описано PData: PByteArray;
как я понимаю variant имеет сложную структуру и неполучется взяв указатель PData := VarArrayLock(VData) просто прибавить к нему size. Очевидно внутри вариант дугая структура. А как прибавить size это сделать вопрос!


 
Набережных С.   (2002-11-06 14:19) [3]

На кой нужен PByteArray? Сказано же - объяви PData типа PByte, на крайняк так сделай: Inc(PByte(PData), Size). Не нравится - сделай так: integer(PData):=integer(PData)+Size. Попробуй сделать Inc(P) при разных типах P: PInteger, PWord, PDouble и тд и посмотри , что происходит с P.
>как я понимаю variant имеет сложную структуру и неполучется взяв указатель PData := VarArrayLock(VData) просто прибавить к нему size
Есть старинная метОда: когда ничего не помогает, нужно попробовать почитать документацию. В данном случае - хелп. VarArrayLock дает указатель на плоский массив байт размером, заданным в VarArrayCreate, который не имеет никакого отношения к внутренней структуре Variant.





Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.026 c
3-59000
cd1
2002-10-28 21:34
2002.11.18
Извините за вопрос, кто-нибудь работал с TreeView в БД?


3-59029
Левша
2002-10-29 05:53
2002.11.18
Работа с BLOBами: информация...?


1-59151
AVeR
2002-11-08 19:44
2002.11.18
Разбиение файла на части


3-59040
Dbrf
2002-10-29 15:55
2002.11.18
Связь главной таблицы с подчиненной


7-59449
ППавел
2002-08-07 04:55
2002.11.18
Модем