program test
use msfwin
interface
subroutine hProc(i,i1)
!MS$ATTRIBUTES DLLIMPORT::hProc
integer i,i1
end subroutine
end interface
integer hMod,ret, hProc1
integer, parameter::i=1,i1=2
hMod=LoadLibrary("vprodll.dll")
hProc1=GetProcAddress(hMod,"_SEEDDLL@8")
call hProc1(i,i1)
ret=FreeLibrary(hMod)
end program
dll в Фортране
int IntAdd(int a, int b)
{
return (a+b);
}
Как на Фортране загрузить My.dll и вызвать эту функцию?
Цитата:
Originally posted by lenbek
Если есть специалисты по Фортрану, скажите, как на нём вызывать DLL. Пусть есть написанная на C++ My.dll с функцией
int IntAdd(int a, int b)
{
return (a+b);
}
Как на Фортране загрузить My.dll и вызвать эту функцию?
Если есть специалисты по Фортрану, скажите, как на нём вызывать DLL. Пусть есть написанная на C++ My.dll с функцией
int IntAdd(int a, int b)
{
return (a+b);
}
Как на Фортране загрузить My.dll и вызвать эту функцию?
Так же как и в случае использования Си++ - а именно через API-функции
LoadLibrary,FreeLibrary
GetProcAddress
А можно пример? Код на Фортране, загружающий библиотеку, использующий функцию и освобождающий библиотеку
Цитата:
Originally posted by lenbek
А можно пример? Код на Фортране, загружающий библиотеку, использующий функцию и освобождающий библиотеку
А можно пример? Код на Фортране, загружающий библиотеку, использующий функцию и освобождающий библиотеку
Попытался сделать код. Вот что получилось (компилируется с ошибкой на call hProc1)
Код:
Т.е. на Фортране не знаю как, зная адрес функции, ее вызвать - если вообще это возможно. Сама загрузка библиотеки (и освобождение) , получение адреса функции срабатывает.
На Си/Си++ это возможно (там существуют указатели на функции).
Вообще в подобных случаях поступают как раз наоборот: можно написать подпрограммы на Фортране(например, научные подпрограммы со сложными вычислениями), оформить их в виде библиотек, а затем вызывать из других языков - Си/Си++, DELPHI.
В этих языках проще реализовать интерфейс пользователя.