如何在Visual studio中从c++ /CLI和c#调用c++ /CLI

How to call C++/CLI from C++/CLI and C# in Visual studio?

本文关键字:c++ CLI 调用 中从 Visual studio      更新时间:2023-10-16

我不久前才知道c++/CLI是使用非托管c++代码的一种方式。我能够弄清楚如何在c++/CLI项目中调用c++项目中的代码,而c++代码位于静态库中。c++代码在静态库中,c++/CLI代码在Win32应用程序中。

然后我想将c++/CLI项目转换为静态库(从现在起称为包装器),并创建另一个"消费者"项目(c++/CLI或c#)来调用包装器。这就是我被困住的地方。

在c#中,链接项目是很容易的。您所需要做的就是将使用者项目的引用添加到库项目中。如何从c++/CLI或c#项目转换为c++/CLI项目?

好,这是主要问题。我的最终目标是能够自由地从c#切换到c++/CLI到c++,无论是使用dll还是静态库,但我必须先解决我目前的问题。

在c#中,你不能添加对c++/CLI静态库(.lib)的引用,因为.lib是c++特有的。相反,您需要将c++/CLI项目创建为类库项目,该项目可编译为。net程序集(DLL)。生成的DLL可以作为c#项目的参考添加。

还有一件事,我不建议使用c++/CLI为非托管的c++类创建包装器。在这些情况下,最好将类转换为COM类(使用ATL)。由于。net是向后和向前兼容的,COM类可以直接从c#中使用,而不需要创建任何包装器。当你需要在同一个地方混合托管和非托管代码时,c++/CLI是很好的选择,但是当你发现自己在创建包装器时,你应该考虑使用COM。