C ++ API - 什么是正确的方法

时间:2013-03-27 13:28:43

标签: c++ api dll

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

2 个答案:

答案 0 :(得分:3)

如果要创建C ++ - API,可以从DLL /共享库导出一组类。许多用C ++编写的库决定提供一个C接口,因为纯C接口更容易绑定到外语。要将外语绑定到C ++,通常需要包装器生成器,例如SWIG。

C ++ - API也存在这样的问题:由于C ++名称错误,需要使用相同的编译器/链接器来构建框架和应用程序。

值得注意的是,告诉编译器应该导出类的__declspec(dllexport) - 机制是特定于Microsoft编译器的。{1}}。通常的做法是将它放入预处理器宏中,以便能够在其他编译器上使用相同的代码:

 #ifdef _MSC_VER 
 #   define MY_APP_API __declspec(dllexport)
 #else
 #   define MY_APP_API
 #endif

 class MY_APP_API MyClass {}

答案 1 :(得分:1)

导出类的解决方案有一些严重的缺点。您将无法使用其他语言编写DLL,因为它们不支持名称修改。此外,您将无法使用除VS之外的其他编译器(因为相同的原因)。此外,您可能无法使用VS的另一个版本,因为MS不保证,在不同版本的编译器中,修改机制保持不变。

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

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

导出为:

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

您可以将其包装在C#中以使其再次成为一个类。