4

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

4

2 回答 2

3

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

C++-API 还存在一个问题,即由于 C++ 名称修改,需要使用相同的编译器/链接器来构建框架和应用程序。

重要的是要注意__declspec(dllexport)告诉编译器应该导出一个类的机制是特定于 Microsoft 编译器的。通常将其放入预处理器宏中以便能够在其他编译器上使用相同的代码:

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

 class MY_APP_API MyClass {}
于 2013-03-27T13:31:58.110 回答
1

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

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

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

导出为:

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

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

于 2013-03-27T13:36:39.417 回答