用不依赖于COM的方式从C++中调用C#方法

6

有没有一种方法可以在不使用COM Interop的情况下从非托管C++中创建C#对象并调用方法?我正在寻找类似于JNI(但针对.Net)的东西,您可以手动创建VM、创建对象等。


自从 .NET 5.0 版本以后,有一种方法可以实现这个功能:请参见此答案 - Gabriel Devillers
4个回答

6
如果您正在使用C++/CLI,则可以直接与托管世界和非托管代码交互,因此Interop很容易。您还可以自己托管CLR,虽然托管API是基于COM的,但您可以创建任何托管对象。这个过程并不像听起来那么困难,因为一些API调用封装了大量功能。有很多在线信息,例如关于“托管公共语言运行时”的MSDN文档。

3
有一种“未记录”的方法可以从.NET类/方法中导出C样式API。这最终会导致一个.NET dll导出了API,可以从C / C ++或任何可以使用.DLL的内容调用它们。如果您喜欢“阅读”(beh ;)),您可以获取一本名为:Inside Microsoft® .NET IL Assembler的书,在第15章“托管方法作为非托管导出”中找到此技术。还有一个不错的示例项目,可用作32位环境的起点:http://www.codeproject.com/KB/dotnet/DllExport.aspx

1

我是jni4net的作者,这是一个开源的JVM和CLR之间的进程内桥梁。它是基于JNI和PInvoke构建的,不需要C/C++代码。我希望它能对你有所帮助。


1
在C++项目中,您可以逐个文件决定是否使用托管的C++。尝试更改项目中的某个文件的设置,以便将其编译为托管代码,并将调用放置到C#对象中。
跨越C++/C#边界是有代价的,因此您应该分析何时进行。例如,在循环内部进行会导致性能下降。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接