如何在c++中调用c#代码
How to call C# code in C++
我有一个小的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"禁止您这样做。
- 无法从 C 调用C++代码而没有错误
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 从 ASM 调用C++代码中标准库的链接
- 如何从C#调用C 代码及其调用的代码
- 使用带有 MEX 包装器的帮助程序 C 文件从 MATLAB 2016 调用C++代码时出现问题
- 从 Swift 调用C++代码比调用 C 代码更"expensive"还是更慢?
- 从x64中的C#调用C 代码,所有参数都会偏移一个
- 使用C#的结构调用C 代码
- Golang:在跨平台调用C++代码
- 从 C# 调用 C/C++ 代码
- 调用 C 代码的 Win32 应用程序
- 从C#.NET应用程序调用C/C 代码
- 如何使用JNA从Android调用C/C 代码
- 当在C#中的WPF应用程序中单击一个按钮时,如何调用C 代码
- 从 C# 调用C++代码而不创建 dll
- 通过嵌入式 Python 调用C++代码
- 当我从C#代码调用C++代码时,它是线程安全的吗
- 如何从Node.js调用C++代码
- 让非托管 C++ 代码调用调用 C# 代码的托管 C++ 代码
- 使用C++中的引用从C#调用C++代码时出错