众所周知,在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;
}

10-08 09:31