我有一个小的 dll,我想与 D 一起使用语。我假设它是用 C 语言编写的。这些是我有权访问的文件,它们与我的程序位于同一目录中。:
- b3d.dll
- blitz3dsdk.exp
- blitz3dsdk.lib
- blitz3dsdk.h
这是我试图让 D 使用这个 dll 的方法。
test.d
pragma(lib, "blitz3dsdk.lib");
int main(string[] Args)
{
bbBeginBlitz3D();
bbEndBlitz3D();
return 0;
}
编译: dmd test.d -w -wi -debug
结果: 错误 43:不是有效的库文件。
Blitz3DSDK.d
module Blitz3DSDK;
// __declspec(dllimport) int bbBeginBlitz3D() - from the header file.
export extern (Windows) int bbBeginBlitz3D();
// __declspec(dllimport) void bbEndBlitz3D() - from the header file.
export extern (Windows) void bbEndBlitz3D();
test.d
import Blitz3DSDK;
int main(string[] Args)
{
bbBeginBlitz3D();
bbEndBlitz3D();
return 0;
}
编译: dmd test.d -w -wi -debug
结果: 错误 42:符号未定义 _bbBeginBlitz3D@0
错误 42:符号未定义 _bbEndBlitz3D@0
任何关于如何使用此 dll 的想法或任何有用的最新在线指南将不胜感激。我已经有一段时间没有摆弄 native 代码和共享库等了。
最佳答案
库文件可能是COFF 格式。使用 coffimplib
将其转换为可与 D 的链接器一起使用的 OMF 库,或使用 implib
从 DLL 创建导入库。
export
用于从 DLL 导出函数,而不是导入它们。
关于windows - 在 D 中使用 Windows dll 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479355/