众所周知,在C / C ++中,当我处理动态库时,我会写一个与此宏类似的宏。
#ifdef _WIN32
# define DLLAPI __declspec(dllimport)
#else
# define DLLAPI
#endif
我想做的是使用D编程语言编写的模板mixin,因此我可以从某个库中很好地声明函数:
mixin DLLAPI(int, "function1", string, int); // int function1(const char* arg1, int arg2)
mixin DLLAPI(byte, "function2"); // char function2()
// etc
第一个问题是-为此使用模板mixin还是只在
version (Windows) {} version (linux) {} //...
块内编写代码是一个好主意?第二个问题-如何在函数名称之后很好地采用所有类型? :)
最佳答案
解决方案只是使用extern(System)而不是extern(C)/ extern(Windows)-它在Windows中默认为stdcall,在Linux中默认为cdecl,而不是。
从而:
extern(System) {
int function(...) foo;
}