1

不久前我了解到 C++/CLI 是使用非托管 C++ 代码的方法。我能够弄清楚如何从 C++/CLI 项目中的 C++ 项目调用代码,而 C++ 代码位于静态库中。C++ 代码位于静态库中,C++/CLI 代码位于 Win32 应用程序中。

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

在 C# 中,链接项目非常简单。您所需要的只是将消费者项目中的引用添加到库项目中。从 C++/CLI 或 C# 项目到 C++/CLI 项目,您如何做到这一点?

好的,这是主要问题。我的最终目标是能够使用 DLL 或静态库自由地从 C# 到 C++/CLI 到 C++,但我必须先解决我目前的问题。

4

1 回答 1

3

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

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

于 2013-01-06T02:09:03.940 回答