gpt4 book ai didi

haskell - 从 Haskell 调用 DLL

转载 作者:行者123 更新时间:2023-12-02 03:37:58 26 4
gpt4 key购买 nike

我有一个名为 Foo.dll 的 Windows 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 是正确的。

如果有人能仔细检查我写的内容是否完全是胡说八道,我将不胜感激......

关于haskell - 从 Haskell 调用 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22071122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com