Хитрый момент... Delphi и GetProcAddress

Delphist 24.03.2004 - 22:26 | Столкнулся с двусмысленной штукой: есть следующий исходник type MyFunc = function: Pointer; var x: MyFunc; ... x := GetProcAddress(hDll, 'MyFuncName'); ... Интересно, как проверить условие (x <> nil)? Ведь если написать if x <> nil then ... то по правилам Паскаля будет сделан вызов функции x и сравнение ее результата с nil. А если в заданной DLL отсутствует функция 'MyFuncName'? Тогда при выполнении такой проверки получаем run-time error . Вариант вроде этого красотой не блещет - лишняя переменная и лишнее присваивание :( type MyFunc = function: Pointer; var p: Pointer; x: MyFunc; ... p := GetProcAddress(hDll, 'MyFuncName'); if p <> nil then x := p;
? 1 - 24.03.2004 - 22:33 | x:=GetProcAddress(HDLL,'Proc'); if @x<>nil then... кстате если так катит то кинь ответ если не трудно...
VaS 2 - 25.03.2004 - 08:33 | Assigned()
Delphist 3 - 25.03.2004 - 08:46 | ! Верно! А я всегда считал, что Assigned() работает только с методами. Глянул сейчас help - век живи, век учись. Спасибо, VaS
Delphist 4 - 25.03.2004 - 08:51 | Заодно еще один схожий вопрос: Вызываю я API-функцию, требующую callback. Например, EnumWindows. Как "скормить" этой API-функции метод объекта в качестве callback-параметра? Чтобы еще и соглашения о вызове выполнялись? Есть подозрение, что это невозможно, но...
Sabrian 5 - 25.03.2004 - 13:08 | Возможно, обьяви метод как STDCALL. Но это все-равно бесполезно т.к. первый параметр при вызове метода будет помещен в Self то-есть фактически function Method(Self:TSomeClass;a,b:integer):integer;stdcall; и function TSomeClass.Method(a,b:integer):integer;stdcall; равные вещи А Assign лучше не вызывай, пиши @x для приведения x к указателю и @@x для получения собственно адреса переменной x.
Sabrian 6 - 25.03.2004 - 13:09 | Блин какой Assign!!!! Assigned :))))
VaS 7 - 25.03.2004 - 14:35 | 4: Невозможно. Можно взять из TMethod указатель на код, но это будет указатель на метод в VMT класса.
yeziz 8 - 25.03.2004 - 16:22 | А в дельфях можно объявлять статические методы? То бишь не связанные с экземпляром класса? Если да, то можно попробовать всопользоваться таким методом.
Sabrian 9 - 25.03.2004 - 17:46 | to7: Метод не имеет входа в VMT если он не виртуальный. А указатель на код невиртуального метода можно просто получить оператором @. to8: Функции не связанны с обьектом. Несвязанных методов нет, так как нет статических членов класса. В Делфи(впрочем не только в Delphi) метод это функция которой дополнительно передается указатель на вызывайщий обьект.
VaS 10 - 26.03.2004 - 08:51 | 9: > Метод не имеет входа в VMT если он не виртуальный. Из названия VMT это следует напрямую.

>>