我该如何用c++编写我的库以便在.net中使用?
How should I write my lib in C++ for use in .NET?
我有一个用c++编写的库的原型。它是CPU密集型的,所以我用C写了一部分(因为工具),剩下的部分用c++写,并使用了自定义内存分配器和各种东西。
我想在。net中使用这个库。我不太确定该怎么做。似乎我应该在。net中编写一个C接口和一个包装器来使用托管c++,我假设我有完全相同的代码文件,除了我添加一个或两个文件并为它们编写一个托管类。
如果我走托管路由,我应该知道的好处或限制是什么?
c++/CLI是你正在寻找的答案。c++/CLI的美妙之处在于,它允许您将本地c++与。net代码混合在一起,您可以使用它来构建供。net开发人员使用的库。下面的MSDN文章很好地介绍了它是如何工作的:
http://msdn.microsoft.com/en-us/magazine/cc163852.aspx希望这对你有帮助!
这取决于你的c++库和。net代码之间的"表面接触"(顺便说一句,无论你选择哪种方式,你都需要将其作为DLL公开)
如果你真的有一个完全面向对象的库,有类、方法、属性,也就是说:一个对象模型,你可以选择c++/CLI,这样集成将是相当透明的。缺点是你必须理解它的一些微妙之处(我认为你也有一些关于如何嵌入MSVC运行时的限制)。
如果您可以将API减少到有限的方法集,那么您可以导出其中的一些方法并使用p/Invoke (DllImport)属性。请参阅本教程:平台调用教程)。在这种情况下,确保暴露的参数可以被。net层使用(不要使用复杂的C/c++类型,指针指向指针,指针指向指针……,不要使用c++类,…),并尽量确保内存分配将由。net端完成。
PS:作为旁注,您应该考虑32位/64位问题。你的DLL是64位的吗?你们会同时发布这两个版本吗?相关文章:
- 如何用数字处理log(0)
- 如何用转义符替换字符串中的所有特殊字符
- 如何用参数值调用函数(仅在运行时已知)
- 如何用RISC-V GD32VF103CBT6开发板卸载精确的ADC过采样
- 如何用for循环在c++中生成单词三角形
- 如何用C++编写BFS函数
- 当对话框被接受时,如何用参数调用槽
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 如何用前导零填充数组?
- 如何用 2 个对象过度引导运算符
- 如何用C / C++编写钢琴程序
- C++:如何用单个命令替换复杂的迭代?
- 是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- C++ DLL(不是 CLI)是否可以调用 .NET Core 3.0 委托?
- System.AccessViolationException:shared_ptr C# .NET 和 C++ 应用程
- 我该如何用c++编写我的库以便在.net中使用?