Lazarus и указатели

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сообщение itfx » 30.08.2005 13:01:20

В дельфях есть функция прямого перевода адреса в поинтер...
Ptr(address)=pointer.
Во freepascale тоже есть эта функция, но она немного другая...
В общем код
Код: Выделить всё
var
i:longint; // прямой адрес (указатель на структуру MSG из WinAPI функции)
s:^tagmsg;
ms:msg;
begin
s:=ptr(i); //в FPC:  s:=ptr(чего-то там);
ms:=s^;

Все работало в дельфи,
в FPC не хочет...
Ведь FPC требует другой тип данных:
Ptr возвращает farpointer, а s - указатель (^tagmsg).

Вопрос: а как делать правильно? :blink:
itfx
незнакомец
 
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение Alexander » 30.08.2005 14:24:27

Не знаю про то ли я. Но вот такой код работает. Указатель и есть LongInt.

Код: Выделить всё
type
      TRe = record
      a : Longint;
      b : Longint;
      c : Longint;
      end;
      PTRe = ^TRe;


 var
      L : LongInt;
      R : TRe;
     
begin

R.a := 88888;

L := LongInt(Pointer(@R));

WriteLn(l);

WriteLn(PTRe(l)^.a);

end.
Alexander
 

Сообщение itfx » 30.08.2005 16:03:32

Вот оно...
Код: Выделить всё
WriteLn(PTRe(l)^.a);
- вот оно...
Если честно - первый раз вижу подобную конструкцию,
а ведь работает. Спасибо, помогли.
itfx
незнакомец
 
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение pda » 31.08.2005 18:25:25

itfx писал(а):В дельфях есть функция прямого перевода адреса в поинтер...
Ptr(address)=pointer.
Во freepascale тоже есть эта функция, но она немного другая...

...
itfx писал(а):Вопрос: а как делать правильно?  :blink:

RTFM :D

Это - устаревшая функция.
Вот, что пишут в Delphi help:
In Delphi code, Ptr converts the given address to a pointer. A call to this function generates no code, but simply treats the 32-bit value given by Address as a pointer.

А вот, что пишут в доке FPC (файл rtl.pdf):
Ptr returns a pointer, pointing to the address specified by segment Sel and offset Off.
Remark:
1.In the 32-bit flat-memory model supported by Free Pascal, this function is obsolete.
2.The returned address is simply the offset.


Короче, в flat модели давно надо делать прямое преобразование типа. А лучше - сразу описывать ссылочные типы. :)
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Сообщение itfx » 31.08.2005 19:03:17

Все это хорошо, но на практике, когда мало времени,
хочется использовать СТАРЫЕ, проверенные
временем, методы.
Возникают проблемы, когда эти старые методы
не работают.
Можно много рассуждать об удобстве и
скорости работы, но все равно спасибо за консультацию :)
itfx
незнакомец
 
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 21

Рейтинг@Mail.ru