Кто имеет опыт подключения внешних DLL
Clarion 5b, ABC, Legacy:
После завершения работы процедуры ExternalProcedure@FSB из
TESTDLL.DLL (Clarion)
аварийное завершение: 'Программа выполнила недопустимую операцию и
будет закрыта' (ошибка в стироке ^^^^^^^^^^^).
Ошибка возникает в случае если завершается
последняя(единственная) копия процедуры (ExternalProcedure@FSB)
и если процедура содержит Browse. Если процедура простое окно
нормальное завершение процедуры FreeLibrary.
КАК ЭТО ПОБОРОТЬ ?
Запуск осуществляется в отдельном процессе:
Код: Выделить всё
TGroup GROUP
NumThread BYTE
PathDb STRING(64)
END
...
TGroup = Thread()
PathDb = 'TBASE.TPS'
START(StartExtProc,,'TESTDLL.DLL','ExternalProcedure@FSB',TGroup)
...
!-----------------------------------------------------------------------------
! Вызов внешней процедуры
!-----------------------------------------------------------------------------
StartExtProc PROCEDURE(STRING DllName, STRING ProcName, STRING ParGroup)
L:DLLName CString(255)
L:DllNamePtr ULONG
L:DLLInstance ULONG
L:ProcName CString(255)
L:ProcNamePtr ULONG
L:ProcPtr LONG
L:Result LONG
L:Group GROUP
NumThread BYTE
PathDb STRING(64)
END
CODE
L:Group = ParGroup
L:DLLName = DllName
L:DllNamePtr = Address(L:DLLName)
L:DLLInstance = LoadLibrary(L:DllNamePtr)
IF L:DLLInstance = 0 Then
Message('Не найдена DLL:' & Clip(L:DLLName))
ELSE
L:ProcName = ProcName
L:ProcNamePtr = Address(L:ProcName)
L:ProcPtr = GetProcAddress(L:DLLInstance, L:ProcNamePtr)
IF L:ProcPtr = 0
Message('Не найдена процедура - ' & Clip(L:ProcName))
ELSE
CallAddr(L:ProcPtr,L:Group)
END
L:Result = FreeLibrary(L:DLLInstance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
END
С уважением!,
Селин_К.Е. mailto:kada@adm.kaluga.ru
Написал: ClaList(2)