{$mode delphi} в {$mode objfpc}

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

{$mode delphi} в {$mode objfpc}

Сообщение Brainenjii »

Ковыряю исходники ExtPascal на предмет решения всяких неприятных ситуаций, встретил такой код:

Код: Выделить всё

Function BWebGridClass.SelCheckResults(Method: TExtProcedure;
  Params: Array Of Const): TExtFunction;
Var
  Obj : TObject;
  MetName, ObjName : string;
Begin
  Obj := TMethod(Method).Data;
  MetName := Obj.MethodName(@Method);
  If Obj Is TExtObject Then
    ObjName := TExtObject(Obj).JSName;
...

где TExtOProcedure - procedure of object.
С {$mode delphi} собирается свободной, с {$mode objfpc} - не могу сообразить, где @, где ^ наставить (очень слаб в этом деле). Подскажите, как правильно будет переделать?
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

Можно, что то почерпнуть тут: Система внутренних команд на основе published методов.
@ - это получение аддреса, для переменной это так, но получается что @Button1Click почему то не работает (или я что то напутал)
В FPC, получается, чтобы получить аддрес метода без использования MethodAddress(ProcName) а в лоб, тобишь средствами самого языка, нужно делать такие вот грабли:

Код: Выделить всё

showmessage(MethodName(TMethod(@Button1Click).Code))

И мне так кажется, что тут что то не чисто... Данный код в Delphi не работает... говорит не правильный переданный параметр.

^ - разименование указателя, тобишь получения данных на которые указывает указатель.


Так, что ждем более опытных в этом вопросе, сам уже наметил, где мне это может пригодиться... :D и хочется узнать, как все же получать аддреса, которые можно будет например вызывать в ассемблерном коде методом CALL или jmp. Тобишь без использования MethodAddress.
Так что присоединяюсь к вопросу. (Если Brainenjii Вы не против :oops: )
И если Вы знаете, напишите код и для Delphi, заранее спасибо :)...
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Brainenjii, смыл здесь брать указатель от указателя?

Код: Выделить всё

 MetName := Obj.MethodName(@Method);

Вам в функцию уже приходит указатель на метод.
Ответить