2013-03-27 176 views
4

我必须为C++框架构建一个API来完成一些模拟工作。我已经创建了一个具有__declspec(dllexport)函数的新类,并将该框架构建到DLL。 这工作得很好,我可以在C#应用程序中使用框架。 但是有没有另一种或更好的方法来创建一个API与C + +?C++ API - 什么是正确的方法

+0

您是否在寻找重新分配方法? – 2013-03-27 13:30:39

回答

1

该解决方案与导出类有一些严重的缺陷。您将无法使用其他语言编写DLL,因为它们不支持名称修改。此外,你将不能使用VS以外的编译器(因为同样的原因)。此外,您可能无法使用另一VS的版本,因为MS不保证,那重整机制停留在不同版本的编译器相同。

我建议使用扁平的C风格的界面,例如。

MyClass::Method(int i, float f); 

导出为:

MyClass_MyMethod(MyClass * instance, int i, float f); 

你可以用它里面的C#,使之成为一流的一次。

+0

这不只是是混淆,如果的std :: string或std ::例如向量的定义版本之间改变,你将无法可靠地使用那些在接口(更糟的是,它实际上可能编译和链接... ) – jcoder 2013-03-27 13:39:07

3

如果你想创建一个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 {} 
相关问题