SergeSerge3leo
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору aur1 Цитата: В вашем примере на строку: print *, 'Result FreeLibrary(1)=', pproc(1), 'expect .false' компилятор выдал Error: Type mismatch in argument 'hmodule' ; passed INTEGER(4) to INTEGER(8) Если закоментировать строку, все проходит. (не соответствие типов) | Да, ошибка, должно было бы быть: pproc(1_C_INTPTR_T) Нет под рукой 64-бит MinGW Цитата: Наверное, могут быть проблемы с зависимостями этой dll. ЕМНИП была утилита depends от Марка Русиновича. Ну, если проблем с зависимостями нет и LoadLibrary(C_CHAR_'kernel32.dll' // C_NULL_CHAR) нормально загружает, а LoadLibrary(C_CHAR_'OKAWSP6.DLL' // C_NULL_CHAR) нет, то, как советует karakurt2, можно сотворить интерфейсы для LoadLibraryExA() и GetLastError(), по образу и подобию, и попробовать разные флаги наблюдая за кодами возврата. https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa P.S. Хреново я этот WinAPI помню, LoadLibraryA() всегда принимает обычные восьмибитные символы, а LoadLibrary() синоним для LoadLibraryA() или LoadLibraryW() в зависимости от чего-то там. В порядке бреда, можно попробовать вызывать LoadLibraryA(), т.к. фортран интерфейс ж написан для однобайтных строк. Интерфейс и так вызывает LoadLibraryA() для фортран LOADLIBRARY() P.P.S. Цитата: Не знаю как написать интерфейс для вызова wspSPT из okawsp6.dll |
Код: FUNCTION wspSPT(p, t) BIND(C, NAME='wspSPT') USE ISO_C_BINDING !GCC$ ATTRIBUTES STDCALL :: wspSPT real(C_DOUBLE) :: wspSPT real(C_DOUBLE), VALUE :: p real(C_DOUBLE), VALUE :: t END FUNCTION wspSPT |
|