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

C++ API - what is the right approach

本文关键字:方法 API 什么 c++      更新时间:2023-10-16

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

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

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

我建议使用扁平的c风格接口,例如

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

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

你可以把它包装在c#中,使它再次成为一个类。