我有一个c ++项目。我承认我在c ++中是一个完整的零。但是我仍然需要编写一个c ++ .net包装器,这样我就可以使用非托管的c ++库。所以我有: 1)非托管项目的头文件。 2)非托管项目的库(.dll和.lib) 3)一个空的C ++ .NET项目,我打算用它作为我的c#应用程序的包装器
我该如何开始?我甚至不知道如何设置对非托管库的引用。
S.O.S。
答案 0 :(得分:35)
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),而不是类。
答案 1 :(得分:8)
您需要使用.NET中的p/invoke与您的非托管DLL进行通信。
基本上,您为要在非托管DLL中调用的每个函数创建一个函数头,并告诉.NET函数所在的DLL,然后只需在.NET包装器中调用该函数。
您甚至不需要任何C ++知识 - 只要您知道非托管DLL中函数的函数定义以及正确的数据类型。