Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Указатель на переменную


Автор: Devorior 26.12.2003, 13:17
есть переменная Item типа Variant
в процедуре CopyMemory надо сделать указатель на Item,
не могу допереть как это сделать bored.gif

Код

Destination := HeapAlloc(
   FHeapHandle, 0, SizeOf(AnyType));
  CopyMemory(Destination,Item,SizeOf(Item));

Автор: Illusion Dolphin 26.12.2003, 13:36
а "^Item" не помогаетconfused.gif

Автор: Devorior 26.12.2003, 13:40
не помогает sad.gif

Автор: <Spawn> 26.12.2003, 13:59
Попробуй так:
Код
CopyMemory(Destination,@Item,SizeOf(Item));


Автор: Belij 26.12.2003, 14:03
дык это тоже не помогает - выводится потом ересь какая-то по этому адресу....

Автор: <Spawn> 26.12.2003, 14:10
Значит что то не то делаешь, специально решил проверить:

Код
procedure TForm1.Button1Click(Sender: TObject);
var
 Test: Variant;
 Destination: PVariant;
begin
 Test:= 10;
 GetMem(Destination, SizeOf(Variant));
 CopyMemory(Destination, @Test, SizeOf(Variant));
 ShowMessage(Destination^);
end;

Автор: Belij 26.12.2003, 15:23
<Spawn>, я делал так
Destination := HeapAlloc(
FHeapHandle, 0, SizeOf(AnyType));
Destination^ := Item;
но мне сказали, что Destination^ := Item так делать некорректно, нужно через CopyMemory,
и я писал так как ты советовал, в итоге при выводе элемента списка (см. тему "Как организовать структуру"), выводится всякая ересь....
эту тему, что начал Devorior, идет в рамках вышеуказанной...
и это решение мне не помогло =(((((

Автор: <Spawn> 26.12.2003, 15:59
Так зачем тебе HeapAlloc??? Юзай GetMem:

Код
 GetMem(Destination, SizeOf(Variant));

Автор: Belij 26.12.2003, 16:07
да вот по условию задачи, у меня строится очередь на базе гибридного списка, то есть в очереди хранятся указатели на данные, данные различных типов (byte, word, ..). Так вот прямое присвоение сказали делать нельзя...HeapAlloc я делаю, так как очередь саму строю на heapе.....
а в чем принципиальное различие?
у меня потом при выводе элементов вместо чисел символы рисуются всякие, типа содержимое памяти...

Автор: MPak 29.12.2003, 22:30
Цитата(Belij @ 26.12.2003, 16:07)
да вот по условию задачи, у меня строится очередь на базе гибридного списка, то есть в очереди хранятся указатели на данные, данные различных типов (byte, word, ..). Так вот прямое присвоение сказали делать нельзя...HeapAlloc я делаю, так как очередь саму строю на heapе.....
а в чем принципиальное различие?
у меня потом при выводе элементов вместо чисел символы рисуются всякие, типа содержимое памяти...

Если это не очередное задание какогото сумашедшего
препода то лучше было бы огласить задние полностью....
не забывая что на х86 byte & word обрабатываются дольше
чем на Int, чтобы понять целесообразность использования
Variant.

а вообще всю жизнь было примерно так

var Destonation: PVaraint

New(Destonation)
CopyMemory......

впрочем я такой процедуры (CopyMemory) на помню....
поэтому если она не стандартная и не учитывает особенности
работы с Varaint можно огрести проблем по самое нехочу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)