unni
Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Итак, продолжим (начало на 225 стр. внизу). Код для шаблона dll-ки на Fortran я нашёл: logical(BOOL) function DllMain( hinstDll, fdwReason, lpvReserved ) !DEC$ ATTRIBUTES DEFAULT, DECORATE, STDCALL, ALIAS: "DllMain" :: DllMain USE IFWINTY IMPLICIT NONE integer( HANDLE ), intent( in ) :: hinstDll integer( DWORD ), intent( in ) :: fdwReason integer( LPVOID ), intent( in ) :: lpvReserved select case ( fdwReason ) ! DLL проецируется на адресное пространство процесса case ( DLL_PROCESS_ATTACH ) !CreateUserFunction( hinstDll, & mcad_implicitplot3dInfo ); ! создаётся поток case ( DLL_THREAD_ATTACH ) ! поток корректно завершается case ( DLL_THREAD_DETACH ) case ( DLL_PROCESS_DETACH ) end select DllMain = .TRUE. end function В свойствах проекта установил имя точки входа DllMain и получил предупреждение компилятора при сборке: Debug\SimpleDll.dll : warning LNK4086: entrypoint '_DllMain' is not __stdcall with 12 bytes of arguments; image may not run Что явно указывает на неправильное описание трёх DWORD параметров функции. Где я ошибся в коде? Поскольку шаблон dll у меня есть, то следующий вопрос: Покажите пример на Фортран как обратиться к функции, которая находится в сторонней dll, если есть такая возможность, то меня больше интересует динамический вариант вызова функции: LoadLibrary(), GetProcAddress(), FreeLibrary(). Dll считается собранной на C-компиляторе. |