我有一个名为的Windows DLL Foo.dll
。它(在其他事物中)输出以下内容:
extern "C" __declspec(dllexport) unsigned int Version();
我该如何编写一个Haskell程序来调用此函数并打印出答案?
我设法弄清楚我可以这样写:
foreign import ccall "Version" cpp_Version :: CUInt
这样编译就可以了,但是完全无法链接。这不足为奇。在这一点上,GHC还不知道在哪里寻找该功能。但是我无法弄清楚我需要按下哪个魔术按钮来实现这一目标。谁能告诉我如何使它成功构建?
(我也不是100%确定调用约定应该是ccall
还是stdcall
;有什么区别?)
使用以下选项进行编译似乎可以工作:
ghc -O2 -L. -lFoo --make Wrapper
看起来,添加-lFoo
告诉GHC查找Foo.dll
文件,并且添加-L.
告诉它在DLL搜索路径中包括当前目录。
我不是100%确定这是在运行时加载DLL,还是实际上以某种方式将DLL的代码静态链接到二进制文件中。(!!)
更改ccall
为stdcall
会发出一堆警告(但编译后的代码仍然可以正常工作)。因此,看来这ccall
是正确的事情。
如果有人可以再次检查我所写的不是完全废话,我还是会很感激的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句