如何用C++/CLI包装C++类

How to wrap a C++ class with C++/CLI

本文关键字:C++ 包装 CLI 何用      更新时间:2023-10-16

因此,我正试图使用C++/CLI了解C++和C#之间的互操作性,为非托管C++类创建一个C++/CLI包装器,这是必要的,因为我需要在C#应用程序中使用我的C++类的多个实例。

我制作了一个CLR类库,它使用pimpl来隐藏像这样的非托管类

http://msdn.microsoft.com/en-us/library/ms235281.aspx

我原以为构建这个项目会产生一个.lib文件,但发布文件夹中输出的只是一个DLL。我有点困惑,因为我被引导相信你不能在C++/CLI中导出一个类,我只会链接到我的CLR类库项目输出的.lib文件。我只能假设我创建了错误的项目,但似乎没有太多关于这类事情的文档。

谢谢。

我过去所做的与MSDN文章非常相似

创建一个C++类,并确保该cpp文件的编译器选项设置为"无公共语言运行时支持"

然后使用pimpl在C++/CLI类中引用此C++类,确保此cpp文件已启用"公共语言运行时支持(/clr)"。

输出将是一个可以在现有.NET代码中使用的DLL。

根据经验,我会确保您在包装类中创建的接口只有doubles、int等,并且不引用任何C++类。

@比尔在一些C#代码中使用这个包装DLL,只需使用"添加引用"添加对DLL的引用。您将能够按照预期调用所有公共函数。

输出的是一个.Net程序集,其中包含一些本机代码。如果你想把你的本地代码放进一个静态库,然后把它链接到这个程序集中,那么这也可以。

但最终,如果你想将代码包含在.Net(c#)应用程序中,那么它的.Net接口必须位于程序集(.dll)中。