C++ API - 什么是正确的方法
我必须为C++框架构建一个API来完成一些模拟工作。我已经创建了一个具有__declspec(dllexport)
函数的新类,并将该框架构建到DLL。 这工作得很好,我可以在C#应用程序中使用框架。 但是有没有另一种或更好的方法来创建一个API与C + +?C++ API - 什么是正确的方法
该解决方案与导出类有一些严重的缺陷。您将无法使用其他语言编写DLL,因为它们不支持名称修改。此外,你将不能使用VS以外的编译器(因为同样的原因)。此外,您可能无法使用另一VS的版本,因为MS不保证,那重整机制停留在不同版本的编译器相同。
我建议使用扁平的C风格的界面,例如。
MyClass::Method(int i, float f);
导出为:
MyClass_MyMethod(MyClass * instance, int i, float f);
你可以用它里面的C#,使之成为一流的一次。
这不只是是混淆,如果的std :: string或std ::例如向量的定义版本之间改变,你将无法可靠地使用那些在接口(更糟的是,它实际上可能编译和链接... ) – jcoder 2013-03-27 13:39:07
如果你想创建一个C++ API,从DLL /共享库中导出一组类是最好的选择。许多用C++编写的库决定提供一个C接口,因为纯C接口更容易绑定到外语。要将外部语言绑定到C++,通常需要包装器生成器(如SWIG)。
C++ - API也存在这样的问题,即由于C++名称修改,需要使用相同的编译器/链接器来构建框架和应用程序。
重要的是要注意,告知编译器应该导出类的机制是特定于Microsoft编译器的。通常的做法是把它变成一个预处理宏,以便能够使用相同的代码上的其它编译器:
#ifdef _MSC_VER
# define MY_APP_API __declspec(dllexport)
#else
# define MY_APP_API
#endif
class MY_APP_API MyClass {}
您是否在寻找重新分配方法? – 2013-03-27 13:30:39