如何在D编程语言中创建DLLAPI()模板mixin,其行为类似于C/C++中众所周知的DLLAPI(或类似)宏?

Dej*_*kic 3 templates d mixins

正如大多数人所知,在C/C++中,当我处理动态库时,我会写一个与此类似的宏.

#ifdef _WIN32
#  define DLLAPI __declspec(dllimport)
#else
#  define DLLAPI
#endif
Run Code Online (Sandbox Code Playgroud)

我想要做的是D编程语言中的模板mixin,所以我可以很好地声明某个库中的函数:

mixin DLLAPI(int, "function1", string, int); // int function1(const char* arg1, int arg2)
mixin DLLAPI(byte, "function2");             // char function2()
// etc
Run Code Online (Sandbox Code Playgroud)

第一个问题是 - 为此使用模板mixin是一个好主意,还是只在version (Windows) {} version (linux) {} //...块中编写代码?第二个问题 - 如何在函数名称之后很好地获取所有类型?:)

Tim*_*Čas 6

解决方案只是使用extern(System)而不是extern(C)/ extern(Windows) - 它默认为Windows中的stdcall和Linux中的cdecl和whanot.

从而:

extern(System) {
    int function(...) foo;
}
Run Code Online (Sandbox Code Playgroud)