我不久前了解到 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 项目创建为 Class Library 项目,该项目编译成 .NET 程序集(DLL)。生成的 DLL 可以添加为 C# 项目的引用。
还有一件事,我不建议使用 C++/CLI 为非托管 C++ 类创建包装器。在这些情况下,最好将类转换为 COM 类(使用 ATL)。由于 .NET 与 COM 向后和向前兼容,因此可以直接从 C# 使用 COM 类,而无需创建任何包装器。当您需要在同一位置混合托管和非托管代码时,C++/CLI 非常适合,但每当您发现自己创建包装器时,您应该考虑改用 COM。
关于c# - 如何在 Visual Studio 中从 C++/CLI 和 C# 调用 C++/CLI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178428/