1. Как описано InitProc? Возможно, опущен атрибут DLL
Код: Выделить всё
Module('Lib.Dll')
StatusProcType(Long),Type
InitProc(StatusProcType),Dll
End
...
InitProc(MyProc)
А если хочется вызывать по адресу, тогда так
Код: Выделить всё
Module('Lib.Dll')
StatusProcType(Long),Type
InitProc(StatusProcType),Dll,Name('InitProc')
InitProcAddr(Unsigned Addr),Dll,Name('InitProc')
End
InitProc(Address(MyProc))
Но это НЕ РАБОТАЕТ, если MyProc находится во внешнем DLL. И ещё раз проверь наличие атрибута DLL в описании InitProc
Автору: Не пора ли подписаться на Clalist?
--
C уважением
Yuri
Адрес:
yufil@mail.ru
(Добавление)
Процедура StatusProc, насколько я понял, написана тобой на Кларионе? Если так, то:
1 - какая сборка приложения (один EXE-файл, DLL-либы), и если DLL-сборка, то где находится StatusProc?
2 - по-умолчанию, параметры в Кларион-процедуры передаются через регистры (строки - через внутренний строковый стек), а внешняя либа, скорее всего, требует стандартной передачи параметров - через стек. В этом случае, естественно, после вызова StatusProc произойдет неверное смещение указателя стека, что и может привести немедленно или позже к GPF.
Поэтому прототип своей процедуры необходимо описать так:
MyProc(LONG _Code),C или PASCAL
Что именно (C или PASCAL) необходимо узнать у разработчика внешней либы. Для Виндов, вообще-то, стандартом является PASCAL-протокол передачи параметров.
Удачи!
=============================
С уважением,
Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru
Написал: ClaList(2)