如何在c++中调用c#代码
本文关键字:调用 代码 c++ | 更新日期: 2023-09-27 18:13:08
我有一个小的c#类(Gram.cs),它与第三方dll一起工作来操作设备。现在,我需要使用c++调用这个c#类中的一些函数。
我该怎么做?
我使用MS Visual Studio 2010专业版。
如果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"禁止您这样做。