我该如何用c++编写我的库以便在.net中使用?

How should I write my lib in C++ for use in .NET?

本文关键字:net 何用 c++ 我的      更新时间:2023-10-16

我有一个用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位的吗?你们会同时发布这两个版本吗?