你可以从 C++ 运行 C# 代码吗?

Posted

技术标签:

【中文标题】你可以从 C++ 运行 C# 代码吗?【英文标题】:Can you run C# Code from c++? 【发布时间】:2009-10-09 01:21:55 【问题描述】:

您可以从 c++ 运行 C# 代码吗? 以及如何?

【问题讨论】:

【参考方案1】:

如果您的 C++ 代码是基于 .NET 公共语言运行时 (CLR) 构建的“托管”C++,那么很容易引用 C# 程序集并调用公共类和方法。但是,如果您的 C++ 代码是“本机”的(不是基于 CLR 构建的),那么您需要为 COM 互操作注册您的 C# 程序集并从您的 C++ 代码调用 COM 对象。有一篇 MSDN 文章涵盖了所有血腥细节:

http://msdn.microsoft.com/en-us/library/w29wacsy(VS.80).aspx

Nick Parker 的 CodeProject 上还有一篇好文章,名为“Exposing .NET Components to COM”,您可能会发现它很有用。

【讨论】:

【参考方案2】:

您可以使用非托管 C++ 来运行 .NET 应用程序,但难度取决于您使用的 .NET 版本。

当我使用 .NET 2.0 进行此操作时,我花了整整两周的时间才使其正常工作。

本页中的答案提供了有关需要哪些程序来执行此操作的指导。

http://www.pcreview.co.uk/forums/thread-1225474.php

【讨论】:

【参考方案3】:

根据您要执行的操作,您拥有的另一个选项是在您的应用程序中托管 CLR,这使您可以比通过 COM 更紧密地集成 C# 代码。您可以在 MSDN Magazine article 中阅读有关此操作的概述。

【讨论】:

【参考方案4】:

对于 C++/CLI,是的(以前是托管 C++ -- 对语言有不同的扩展)。

【讨论】:

【参考方案5】:

是的,您可以使用 COM 调用 .NET

【讨论】:

【参考方案6】:

您可以使用 mscoree.dll ClrCreateManagedInstance Function 在没有 COM 的情况下调用 .NET 代码。您需要在 pTypeName 参数中提供您要创建的类型名称的assembly qualified name。

根据记忆,在某些情况下,您可能需要将 ComVisible 属性添加到您希望使用 ClrCreateManagedInstance() 访问的接口或类中。但是,这并不要求您还注册您的类或任何其他与 COM 相关的混乱部署问题。

【讨论】:

【参考方案7】:

我猜对乍得真正有用​​的答案是:

是的,从 C++ 运行 C# 代码在技术上是绝对可行的。但是,如果此页面上的其他答案听起来像是超出了您的想象,那么您还远没有足够的经验来实际执行此操作。考虑到所有因素,这很难实现,所以除非你真的需要从 C++ 运行 C# 代码,否则最好将 C# 代码重写为 C++。

【讨论】:

以上是关于你可以从 C++ 运行 C# 代码吗?的主要内容,如果未能解决你的问题,请参考以下文章

你能在 C# 中编写一段 c++ 代码吗?

“运行时检查失败 #0 - ESP 的值未在函数调用中正确保存”从 C++ 代码成功 C# 回调后

从 C# /WPF 调用 C++ 程序

C# 中的不安全代码

C# 窗口中的 C++ opencv 应用程序

我可以从 c# 表单运行 windows 命令吗? [复制]