2012-05-18 175 views
3

我有一个用标准C++编写的库。我也有一个用C#编写的.net窗体应用程序,它使用非托管库。混合托管/非托管C++?

我明白我可以使用pinvoke,但是我的C++完全是OO,我真的不想乱搞编组等。

有没有办法可以创建一个新的托管C++ dll项目,复制并粘贴我的头文件和代码文件,并编译它并访问所有类?

或者我需要在托管C++中创建一些ref类,并将它连接到我的非托管类?我只是希望这个尽可能简单。

谢谢!

+1

C++/CLI混合托管/非托管性质。 –

+0

[C++/CLI混合模式DLL创建]的可能重复(http://stackoverflow.com/questions/2691325/c-cli-mixed-mode-dll-creation) –

回答

3

即使在C++/CLI中,你仍然需要编写特定的.NET包装,它们只是看起来不一样。所以答案是,你可以把它放在一个C++/CLI项目中,并重新编译并使用它,不是。您仍然需要对数据进行编组(在这种情况下,您可能也会使用p/Invoke),或者您可以创建句柄并使用固定内存来使您的结构可用于托管代码。

我已经完成了这两种方式:我已经在CUDA C中编写了一个GPU库,并使用p/Invoke从F#中调用了它,并且我用C++编写了一个视频处理库,并编写了一个精简的C++/CLI包装器然后在.NET应用程序中使用它。我认为CLI包装更加痛苦,但对于实时视频,我需要更少的延迟(减少复制内存)。对于GPU项目,我更关心吞吐量。

0

您可能要编写C++/CLI中的包装类。只要你返回句柄而不是指针,枚举器而不是集合等等,那么这样做相当简单。

相关问题