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) {} //...块中编写代码?第二个问题 - 如何在函数名称之后很好地获取所有类型?:)
解决方案只是使用extern(System)而不是extern(C)/ extern(Windows) - 它默认为Windows中的stdcall和Linux中的cdecl和whanot.
从而:
extern(System) {
int function(...) foo;
}
Run Code Online (Sandbox Code Playgroud)