如何在c++中调用c#代码

本文关键字:调用 代码 c++ | 更新日期: 2023-09-27 18:13:08

我有一个小的c#类(Gram.cs),它与第三方dll一起工作来操作设备。现在,我需要使用c++调用这个c#类中的一些函数。

我该怎么做?

我使用MS Visual Studio 2010专业版。

如何在c++中调用c#代码

如果C#类很小,并且它处理本地dll,则可以更简单地在C++中重写该类,而不是将.Net集成到应用程序中。此外,集成.Net将强制整个.Net虚拟机仅为处理您的简单类而启动。

,

  • 你可以使用COM互操作:建立一个基于你的C#类的程序集,并使其COM可见。然后你可以使用class作为com对象。
  • 您可以使用Managed c++ 在托管和非托管代码之间创建一个包装器。
  • 您可以反转控制流,因此C#代码将调用非托管函数。在这种情况下,您可以从二进制文件中导出它,并从具有DllImport属性的C#代码中导入。

通常情况下,你应该让你的c#代码在你的c#项目设置中显示为COM,并使用c# IJW正则化工具。

查看http://msdn.microsoft.com/en-IN/library/ms173185.aspx

几年前我就使用这种方法将c#集成到c++中。

你将能够在你的c++代码中加载c#程序集作为COM组件。

这可能是你正在寻找的(我之前回答过类似的问题:如何在windows phone (c#)中使用c++项目)

a)直接从C库加载符号,例如:
using System;
using System.Runtime.InteropServices;
static class win32
{
    [DllImport("kernel32.dll")]
    public static extern IntPtr LoadLibrary(string dllToLoad);
    [DllImport("kernel32.dll")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
    [DllImport("kernel32.dll")]
    public static extern bool FreeLibrary(IntPtr hModule);   
}

(这是从:http://www.andyrushton.co.uk/csharp-dynamic-loading-of-a-c-dll-at-run-time/经过简短的谷歌搜索)

您需要将c++接口方法导出为"C",例如:

extern "C" __declspec( dllexport ) int MyFunc(long parm1);

(from MSDN: http://msdn.microsoft.com/en-us/library/wf2w9f6x.aspx)

b)在c++/CLI中使用包装器连接非托管c++和托管c#:

这里有一个很好的例子:http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-minutes

请注意,语法乍一看有点奇怪,并不是所有东西都可以使用。但是,您获得的是使用c++类的能力——导出"C"禁止您这样做。