从Haskell调用DLL

数学兰花

我有一个名为的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的代码静态链接到二进制文件中。(!!)

更改ccallstdcall会发出一堆警告(但编译后的代码仍然可以正常工作)。因此,看来ccall是正确的事情。

如果有人可以再次检查我所写的不是完全废话,我还是会很感激的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章