从 C++ 调用 C#

Posted

技术标签:

【中文标题】从 C++ 调用 C#【英文标题】:Calling C# from C++ 【发布时间】:2012-08-07 17:40:40 【问题描述】:

我一直在寻找一种从 C++ DLL 项目调用在 C# EXE 项目(VS 2008)中编写的函数的方法。如果可能的话,我可以将 C# 代码作为 C++ 项目本身的一部分。我所能找到的只是 DLL。

最终我想从 VB6 调用 C# 代码,但我以这种方式提出问题,因为我不相信没有中间步骤就可以采用后一种方式。

谢谢,

伊恩

【问题讨论】:

【参考方案1】:

最终我想从 VB6 调用 C# 代码,但我以这种方式提出问题,因为我不相信没有中间步骤就可以采用后一种方式。

您可以将 C# 类注册为对 COM 可见,然后直接从 C++ 或 VB6 调用它们。

有关详细信息,请参阅 MSDN 上的Example COM Class,以及Interoperability。

【讨论】:

@mydogisbox 对于从 VB6 调用,这是迄今为止最简单的选择...对于从 C++ 使用,C++/CLI 更容易 - 但如果唯一目的是在 VB 中使用,这不是真的很丑 谢谢,但我更愿意做的是包装 C# 代码,以便稍后 VB 可以调用它。它不必是 C++,我只想要 DLL 中的所有内容。有任何想法吗?再次感谢。 @IanReynolds 这就是 COM 可见的东西所做的 - 它使您的程序集 (DLL) 可以直接由 VB6(和 C++,以及任何其他可以使用 COM)使用。这是让您的 C# 代码可用作 单个 DLL 的唯一方法 - 用 C++ 包装会导致您拥有 2 个 DLL(C# + 包装器) 对于我的经验不足,我深表歉意。目前,C# 代码不汇编为 DLL。 C# 构建一个可执行文件。 @IanReynolds 您仍然可以使用 COM,但通常,如果您想“包装”它,您会将 C# 代码变成一个库。你可以让一个单独的 C# 项目生成一个使用该库的可执行文件,以及 VB 端。【参考方案2】:

您可以使用 /CLR 选项编译您的 c++ 项目,然后在其中调用 C#。为此,您需要包含 vcclr.h,然后为您需要调用的每个 dll 添加一条 using 语句。

#include <vcclr.h>
#using <System.dll>

【讨论】:

为避免使用 /clr 重新编译整个项目,您还可以只开发一个程序集/DLL,用 C++/CLI 编写,向您的 C# 代码公开一个非托管接口

以上是关于从 C++ 调用 C#的主要内容,如果未能解决你的问题,请参考以下文章

*** 关于从 C# 调用本机 C++

使用指针参数 (WCT) 从 C# 调用 C++ 方法

从 c# 调用 C++ 代码

使用 c# 中的 c++ 引用中的引用从 C# 错误调用 C++ 代码

System.AccessViolationException 从 C# 调用 c++ 函数

从 C# 调用 C++ 线程