所以我试图通过C ++ / CLI来了解C ++和C#之间的互操作性,为非托管C ++类创建C ++ / CLI包装器,这是必要的,因为我需要C#中的几个C ++类实例应用
我创建了一个CLR类库,它使用pimpl来隐藏像这样的非托管类
http://msdn.microsoft.com/en-us/library/ms235281.aspx
我原本以为构建这个项目会产生.lib文件,但是在release文件夹中输出的所有内容都是DLL。我有点困惑,因为我认为你不能在C ++ / CLI中导出一个类,而我只是链接到我的CLR类库项目输出的.lib文件。我只能假设我创建了错误的项目,但似乎没有太多关于这类事情的文档。
感谢。
答案 0 :(得分:3)
输出的是.Net程序集,其中包含一些本机代码。如果你想把你的本机代码放到一个静态库中然后将它链接到这个程序集中那么那也可以。
但是如果你想在.Net(c#)应用程序中包含你的代码,那么最后它的.Net接口必须驻留在一个程序集(.dll)中。
答案 1 :(得分:3)
我过去所做的与MSDN文章非常相似
创建C ++类并确保该cpp文件的编译器选项设置为“No Common Language RunTime Support”
然后使用pimpl在C ++ / CLI类中引用此C ++类,确保此cpp文件启用了“公共语言运行时支持(/ clr)”。
输出将是一个可以在现有.NET代码中使用的DLL。
根据经验,我会确保你在包装器类中创建的接口只有double,int等,而不是引用任何C ++类。
@Bill在某些C#代码中使用此包装器DLL只需使用“添加引用”添加对DLL的引用。您可以按预期调用所有公共函数。