Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование типа pointer в указатель метода. [D7, WinXP]


Страницы:   1 2

Kostafey ©   (2005-10-07 21:04:00) 

Прошу помощи у мастеров:

TFunctions.MethodAddress(FunctName);

- возвращает pointer на метод с именем FunctName, где FunctName:shortstring а как этот pointer преобразовать к указателю на метод следующего вида:

TFunc = function (x:real):real of object;

(кстати метод с именем FunctName имеет ту же структуру)

Если писать просто

TFunc(TFunctions.MethodAddress(FunctName));

- то получиться ошибка приведения типов,

TFunc(TFunctions.MethodAddress(FunctName)^);

- тогда компиляция проходит успешно, но при запуске приложение аварийно завершается с ошибкой доступа к памяти (кто б сомневался)

Так как из pointer сделать function (x:real):real of object ???


Piter   (2005-10-07 21:43:00) [21]

Да, при всей свой легкости я не знаю как решить задачку :(

Правда, при этом я и не совсем понимаю смысл от использования MethodAddress, но с точки зрения конвертации типов интересно...

По идее:

Kostafey ©   (07.10.05 21:04)
TFunc(TFunctions.MethodAddress(FunctName));


должно работать... ан не работает...


Zeqfreed   (2005-10-07 21:41:00) [22]

Kostafey ©   (07.10.05 21:04)
А зачем ты используешь модификатор of object? Без него все прекрасно работает. Ну или если он необходим, то:

var
tmp : TFunc;
begin
tmp := Form1.MethodAddress('Foo');
TFunc(tmp)(0);


Kostafey   (2005-10-07 21:40:00) [23]


> Piter ©   (07.10.05 21:37) [2]
>
> Хм... интересный вопрос... я ответа не знаю...
>
> Eraser ©   (07.10.05 21:25) [1]
>
> ты вообще о чем?


Говорит-то но все правильно, но проблемы-то это не решает :(((


Kostafey   (2005-10-07 21:39:00) [24]


> Метод и функция/процедура - две большие разницы!

Да, я уже отказался от функций, теперь работают только методы классов !


Kostafey   (2005-10-07 21:38:00) [25]

Спасибо, конечно, за ответ.

> Читать справку.

Да вроде все смотрел.

> class function MethodAddress(const Name: ShortString): Pointer;

о нем и речь

> If Name does not specify a published method for the object,
>  MethodAddress returns nil (Delphi) or NULL (C++).

Да, я объявил эти методы в разделе published класса.

А как преобразовать типы-то ?


Piter   (2005-10-07 21:37:00) [26]

Хм... интересный вопрос... я ответа не знаю...

Eraser ©   (07.10.05 21:25) [1]

ты вообще о чем?


Eraser   (2005-10-07 21:25:00) [27]


> Kostafey ©   (07.10.05 21:04)

Читать справку.
Особенно:
Returns the address of a published method.

Delphi syntax:

class function MethodAddress(const Name: ShortString): Pointer;

C++ syntax:

static void * __fastcall MethodAddress(TClass cls, const ShortString &Name);

void * __fastcall MethodAddress(const ShortString &Name) { return MethodAddress(ClassType(), Name); }

Description

MethodAddress is used internally by the streaming system. When an event property is read from a stream, MethodAddress converts a method name, specified by Name, to a pointer containing the method address. There should be no need to call MethodAddress directly.

If Name does not specify a published method for the object, MethodAddress returns nil (Delphi) or NULL (C++).

Метод и функция/процедура - две большие разницы!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо