在D中使用windows dll的正确方法?

Gar*_*hby 3 windows dll d

我有一个小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;
}
Run Code Online (Sandbox Code Playgroud)

编译: dmd test.d -w -wi -debug
结果: Error 43: Not a Valid Library File.


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();
Run Code Online (Sandbox Code Playgroud)

test.d

import Blitz3DSDK;

int main(string[] Args)
{
    bbBeginBlitz3D();
    bbEndBlitz3D();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译: dmd test.d -w -wi -debug
结果: Error 42: Symbol Undefined _bbBeginBlitz3D@0 Error 42: Symbol Undefined _bbEndBlitz3D@0


任何想法如何使用此DLL或任何有用的最新在线指南将不胜感激.自从我摆弄本机代码和共享库等以来已经有一段时间了.

Vla*_*eev 5

库文件可能是COFF格式.使用coffimplib将其转换为与D的连接器将OMF库使用,或implib以创建DLL导入库.

export 从DLL导出函数时使用,而不是导入它们.