你可以从 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# 代码吗?的主要内容,如果未能解决你的问题,请参考以下文章