我必须为C++框架构建一个API来完成一些模拟工作。我已经创建了一个具有__declspec(dllexport)
函数的新类,并将该框架构建到DLL。 这工作得很好,我可以在C#应用程序中使用框架。 但是有没有另一种或更好的方法来创建一个API与C + +?C++ API - 什么是正确的方法
4
A
回答
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 {}
相关问题
- 1. 确认向Web API提交的正确方法是什么?
- 2. reactjs中的正确方法是什么?
- 3. C++ Inlining - 什么是“正确”的方式
- 4. 什么是正确的设计方法?
- 5. AngularJS - 这是什么正确的方法?
- 6. 什么是SPOJ COURIER的正确方法
- 7. QSqlDatabase&QSqlQuery的正确方法是什么?
- 8. 做SlideAnimation的正确方法是什么?
- 9. 这是做什么的正确方法?
- 10. 使用API的WordPress帖子的正确方法是什么?
- 11. 将日期发布到Web API的正确方法是什么?
- 12. 自承载Web API的正确方法是什么?
- 13. 用JasperReports API设置表达式的正确方法是什么?
- 14. 什么是REST API响应的正确方法?
- 15. 在C#中,将附件张贴到Confluence REST API的正确方法是什么?
- 16. 什么是正确的方法偷懒初始化Objective-C的
- 17. 在C++中使用rand()函数的正确方法是什么?
- 18. 在C#.NET中使用“using”的正确方法是什么?
- 19. C++:组织程序子系统的正确方法是什么?
- 20. 什么是定义这个C宏的正确方法?
- 21. 在C++中使用文件的正确方法是什么?
- 22. 在C++中使用const的正确方法是什么?
- 23. 在C中释放内存的正确方法是什么?#
- 24. 在C++中设置编码的最正确方法是什么?
- 25. 什么是在C++ 98中初始化Matrix的正确方法?
- 26. 在C#中将HTML写入WebBrowser的正确方法是什么?
- 27. 阅读这个Objective-C语句的正确方法是什么?
- 28. 在C#中创建RTF文件的正确方法是什么?
- 29. 在C#中实现IDisposable的正确方法是什么?
- 30. 在C#中导入表单的正确方法是什么?
您是否在寻找重新分配方法? – 2013-03-27 13:30:39