Раньше я делал фортран dll (на Windows 7) с g95. У меня сейчас 64b Windows 10 с Excel 2016 (32 бита), и я пытаюсь повторить то же самое.
Я установил cygwin (для 64b) с gfortran из пакета i686-w64-mingw32. У меня есть эта helloworld Fortran функция:
$ more helloworld.f90
function hello()
integer hello
hello=1
return
end
Я строю DLL, выполнив:
gfortran -fno-underscoring -c helloworld.f90
gfortran -shared -o helloworld.dll helloworld.o
(Я убедился, что DLL работает при вызове из файла Fortran здесь . Обратите внимание, что было необходимо использовать gfortran для компиляции и ссылки на dll, и он не работал с 'i686-w64-mingw32-gfortran.exe')
Теперь я Я хочу использовать его в Excel, поэтому я написал следующий код VBA:
Option Explicit
Option Base 1
Public Declare PtrSafe Function hello Lib "C:\Users\XXXXXXX\Desktop\helloworld.dll" (M As Long) As Long
Function gohello(M As Long) As Long
gohello = hello(M)
End Function
Когда теперь я хочу использовать его в электронной таблице (с простой формулой, такой как "= gohello (1)"), я получаю # ЦЕННОСТЬ! ,
Я почти уверен, что это не pb местоположения: (электронная таблица и библиотека находятся в одном каталоге): VBA просто не может "видеть" dll.
Спасибо, в случае, если кто-то уже сталкивался с этим ...