Как сделать dll для windows 64b с помощью функции fortran, скомпилированной с cygwin? - PullRequest
0 голосов
/ 14 апреля 2020

Раньше я делал фортран 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.

Спасибо, в случае, если кто-то уже сталкивался с этим ...

...