Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
1-29342
Grinder
2004-01-26 21:00
2004.02.10
ошибка при закрытии


14-29548
Думкин
2004-01-21 06:44
2004.02.10
С днем рождения! 21 января.


1-29459
Erik
2004-01-30 12:35
2004.02.10
Access violation при освобождении Variant.


1-29332
dmk
2004-02-02 01:36
2004.02.10
TThread


1-29380
SGU_
2004-01-29 05:51
2004.02.10
Закрытие процесса EXCEL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский