Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Pointer & Function


Автор: gesper 4.11.2010, 23:45
Нужна помощь, две функции есть.
Если делаю все по справке, то ничего не работает, а через задницу, работает но плохо.....

вобщем:

первая функция получает указатель на переменну типа TMyItem
и передает его другой функции
Код

PMyItem=^TMyItem;


Ptr:PMyItem;
Ptr:=MyItem.GetSelfAdress;

Myfunction2(Ptr);

Showmessage(Ptr.text); // работает!!! напишет значение



Если я обращусь к Ptr в второй функции, с прозьбой выдать значение, нехрена не будет...пустая строка.

....
другой пример:
Код

procedure TForm.AddItemToVST(ParentNode: PVirtualNode;PItem: pointer);
....
AddItemToVST(vstGroups.RootNode, addr(tree.Items[i]));  - не работает
AddItemToVST(vstGroups.RootNode, tree.Items[i]);  -  работает



хотя по мануалу Addr() должен возвращать адрес, т.е. pointer

как мне взять адрес переменной item из списка items[i]..... и передавать его в функциях??

Автор: CodeMonkey 5.11.2010, 09:52
О боже.

Срочно читать http://www.transl-gunsmoker.ru/2009/09/blog-post.html.

Автор: gesper 6.11.2010, 13:10
Цитата(CodeMonkey @ 5.11.2010,  09:52)
О боже.

Срочно читать http://www.transl-gunsmoker.ru/2009/09/blog-post.html.

Спасиб за статейку, кое что новое нашел там.

PS: Из богов мены выперли, так что приходится зарабатывать на хлеб...
"... указатели повсюду, даже если вы их не видите."

Автор: gesper 6.11.2010, 15:47
хм.. прочитал статью. вроде стало понятно, только вот компилятор посылает нафиг....

Код

procedure SetBit(var Int: Integer; Bit: Integer);
begin
  ...
end;
 
...
 
var
  Int: Integer;
  Ptr: PInteger;
  Arr: array of Integer;
begin
  // Инициализация Int, Ptr и Arr не показана...
  SetBit(Ptr^, 3);    // Передаётся сам Ptr
  SetBit(Arr[2], 11); // Передаётся @Arr[2]
  SetBit(Int, 7);     // Передаётся @Int


передать типизированый указатель не получается, либо данные читаются не с того адреса либо просто отказываеца компилировать.

Теперь еще больше вопросов в голове... почему указатель нетипизированный передавался и все работало, а типизированный не хочет или ссылается в итоге нетуда куда надо... и как их коппироваьт... бред....

Автор: RomanEEP 6.11.2010, 21:26
Что здесь не компилится или не работает.. Подозреваю, что инициализация Ptr. Рекомендую пользоваться отладчиком, в этом конкретном случае Evaluate\Modify - сразу многие вопросы опадают - где фигня содержится и где не фигня.

Автор: CodeMonkey 6.11.2010, 21:53
(вздох)

Цитата(gesper @  6.11.2010,  16:47 Найти цитируемый пост)
отказываеца компилировать


Сообщение об ошибке является военной тайной?

Цитата(gesper @  6.11.2010,  16:47 Найти цитируемый пост)
либо данные читаются не с того адреса


Ваша вера в наши телепатические способности помогает скорейшему решению вашей проблемы.

Цитата(gesper @  6.11.2010,  16:47 Найти цитируемый пост)
только вот компилятор посылает нафиг


http://www.transl-gunsmoker.ru/2010/08/997.html.

Вообще, молодец, что начал разбираться, а не "ты мне код покажи". Респект.

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