创建简单的c ++ .net包装器.一步步

Evg*_*007 43 .net c# c++ dll wrapper

我有一个c ++项目.我承认我在c ++中是一个完整的零.但是我仍然需要编写一个c ++ .net包装器,这样我就可以使用非托管的c ++库.所以我有:1)非托管项目的头文件.2)非托管项目的库(.dll和.lib)3)一个空的C++ .NET项目,我打算用它作为我的c#应用程序的包装器

我怎么开始?我甚至不知道如何设置对非托管库的引用.

SOS

Ale*_*x F 36

http://www.codeproject.com/KB/mcpp/quickcppcli.aspx#A8

这是大方向.您需要创建C++/CLI类库项目,向其添加.NET类(此示例中为StudentWrapper),创建非托管类实例作为托管类成员,并包装每个非托管类函数.非托管库使用链接器依赖项列表添加到C++/CLI项目,而不是作为引用.在Project - Properties - Linker中打开Additional Dependencies并在那里添加.lib名称.

注意:既然我们在谈论C++/CLI包装器,那么没有PInvoke!PInvoke用于调用导出的函数(API),而不是类.

  • C++/CLI实际上是隐式P/Invoke,因此它仍然是P/Invoke.http://msdn.microsoft.com/en-us/library/2x8kf7zx.aspx,您也可以使用P/Invoke来调用C++类,只需要做一些额外的工作. (6认同)
  • 这里是[codeproject(link)](http://www.codeproject.com/Articles/651516/Exposed-native-to-managed-Cplusplus-CLI-vs-P-Invo)上的另一篇精彩文章。描述P / Invoke和C ++ / CLI。感谢Shmuel Zang。 (2认同)

And*_*lam 8

您需要使用.NET中的p/invoke与您的非托管DLL进行通信.

基本上,您为要在非托管DLL中调用的每个函数创建一个函数头,并告诉.NET函数所在的DLL,然后只需在.NET包装器中调用该函数.

您甚至不需要任何C++知识 - 只要您知道非托管DLL中函数的函数定义以及正确的数据类型即可.