Форум: "Основная";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизКак мне написать процедуру Move для разных типов? Найти похожие ветки
← →
Erik (2004-01-29 17:41) [0]Чтото вроде этого:
procedure MoveEx(const P1, P2: Pointer; Index: Integer);
begin
Move(P1^[i], P2^, SizeOf(P2^));
//Понятно, что SizeOf(P2^) вернет неправельное значение.
Inc(i, SizeOf(P2^));
end;
Вобщето мой вариант выглядит так:
Var
RecSize, ArraySize: Word;
i: Integer;
PData: PByteArray;
..
Move(PData^[i], RecSize, SizeOf(RecSize));
Inc(i, SizeOf(RecSize));
← →
Sandman25 (2004-01-29 17:45) [1]Чем не устраивает обычный Move?
← →
MBo (2004-01-29 17:46) [2]поясни, что именно тебе требуется
← →
Digitman (2004-01-29 17:49) [3]
> Erik © (29.01.04 17:41)
что-то ты загнул ..
я бы еще мог бы понять смысл написания такой проц-ры, если бы в ней не требовалось передавать как параметр размер копируемого блока ...
← →
Erik (2004-01-29 17:50) [4]Это блок повторяется 10 раз, но морут быть разные типы данных!
Move(PData^[i], RecSize, SizeOf(RecSize));
Inc(i, SizeOf(RecSize));
Помоему естествено желаение заменить его одной процедурой.
← →
Sandman25 (2004-01-29 17:52) [5][4] Erik © (29.01.04 17:50)
Точнее, 10 вызовами
MoveEx(PData, i, RecSize, SizeOf(RecSize))???
← →
Sandman25 (2004-01-29 17:54) [6]Кстати, если копируемые данные находились "рядом" и копируются в такой же блок, то их можно скопировать одним Move.
← →
Erik (2004-01-29 17:55) [7]Ладно вот полный текст.
procedure DataToVariant1(Const Params: PRTKParams; Var VData: OleVariant);
Var
RecSize, ArraySize: Word;
PData: PByteArray;
i, SizeMem, ArrByteSize, SizeStn: Integer;
begin
RecSize := SizeOf(Params^);
SizeMem := Sizeof(RecSize);
ArrByteSize := GetByteSizeArr(@Params.TeenID, ArraySize);
SizeMem := SizeMem + ArrByteSize;
SizeStn := RecSize-SizeOf(Params^.TeenID);
SizeMem := SizeMem + SizeStn;
VData := VarArrayCreate([0, SizeMem],varByte);
PData := VarArrayLock(VData);
try
i := 0;
Move(RecSize, PData^[i], SizeOf(RecSize));
i := SizeOf(RecSize);
Move(SizeArray, PData^[i], SizeOf(SizeArray));
Inc(i, SizeOf(SizeArray));
Move(Params.TeenID[0], PData^[i], ArrByteSize);
Inc(i, ArrByteSize);
Move(Params^, PData^[i], SizeStn);
Inc(i, SizeStn);
finally
VarArrayUnLock(VData);
end;
end;
← →
Digitman (2004-01-29 17:55) [8]кривой дорогой идете, товарисч)..
но если упрям, то м.б. поможет это :
function TypeInfo(TypeIdent): Pointer; (смотрим хэлп)
← →
Erik (2004-01-29 17:59) [9]Какие не есть, зато мои! Быстрее идти дорогой которую знаш :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c