c++ API -什么是正确的方法
C++ API - what is the right approach
我必须为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#中,使它再次成为一个类。
相关文章:
- openssl 中已弃用的 AES_ige_encrypt() API 的替代方法
- 在 MySQL 连接器C++ API 中使用一个函数调用执行多个查询的正确方法是什么?
- 是否可以在SO库中公开C API以访问Android JAVA方法
- 有什么方法可以用本机C 代码替换Windows API计时器(settimer)
- 有什么方法可以改变同步Windows API SendARP的行为吗?
- 使用Google Test API进行C 测试私人方法的可能方法是什么?
- 无法从 Python C API 中内置的模块调用方法
- 将类转换为过程 API C++:替换成员变量的常用方法?
- LLDB API:如何调用存储在SBValue中的对象的方法
- 为什么 Windows API 提供 2 种方法来"return"值?
- 使用C 使用PayPal自适应付款API的最佳方法是什么?
- 当用户更改密码时,哪个窗口 API 调用?钩住这个 API 的好方法是什么
- 如何使用JNI用java调用Scanner API的C方法
- 在Windows API中检查文件大小的规范方法
- 如何在 64 位进程中拦截 API 方法调用
- 使用 Windows 版C++加速终止套接字 WinHttp API 的方法
- 客户端 API 的make_unique、工厂方法或不同设计
- 有没有一种方法可以让本机npm包依赖于特定版本的v8C++API
- IAudioClient::Initialize方法的未解析外部符号.API公司
- 如何将方法/ API标记为实验性的