将 C# 类库导入 Visual C++
Posted
技术标签:
【中文标题】将 C# 类库导入 Visual C++【英文标题】:Importing a C# class library into Visual C++ 【发布时间】:2009-02-16 06:56:14 【问题描述】:我有一个 C# 类库,其中包含需要与外部应用程序一起使用的方法。不幸的是,这个外部应用程序只支持 C/C++ 中的外部 API。
假设我在这个 C# 库中有一个 takeIntReturnDoubleArray 方法,它接受一个整数并返回一个双精度数组。我需要做的就是有一个 C++ 方法,它接受一个整数,调用 C# 库并将一个双精度数组返回给调用应用程序。
所以本质上,C++ 库只是充当 C# 包装器和外部应用程序之间的中介。
有没有简单的方法来做到这一点?我是否必须在 C# 方面做一些特别的事情才能轻松地将其导入 C++?我看过一些关于使用#import 语句的讨论,但我真的不知道我在使用 C++ 时在做什么。
我应该在这里采取什么方法?
【问题讨论】:
【参考方案1】:这里有两个主要选择:
-
C++\CLI - 这允许您在同一个源文件中同时拥有托管和非托管代码。然后托管部分可以调用 C# 代码。
COM 互操作 - 将您的 .NET 类型公开为 COM 接口和匹配的 coclass,您可以在非托管 C++ 中轻松使用它们。
【讨论】:
我宁愿选择最简单的解决方案。我相信我可以将我的 C++ 保留为托管代码。 我最终选择了 COM。这并不令人愉快,但它完成了工作。【参考方案2】:COM Interop 是解决此问题的一种方法。对于要公开给 C++ 应用程序的 C# 库函数,您必须有一个 COM 层。这个 (http://msdn.microsoft.com/en-us/library/aa302324.aspx#usingframeworktools_topic10) 可能很有趣。
【讨论】:
以上是关于将 C# 类库导入 Visual C++的主要内容,如果未能解决你的问题,请参考以下文章
调试由 C# Visual Studio 2010 插件导入的 C++ dll
如何将托管 c++ 库导入 C# 应用程序(目标 .net 版本 3.5)