有没有办法创建 C# 对象并从非托管 C++ 调用方法,但不使用 COM Iterop?我正在寻找类似 JNI(但适用于 .Net)的东西,您可以在其中手动创建 VM、创建对象等。
4 回答
如果您使用的是 C++/CLI,那么您可以直接与托管世界和非托管代码进行交互,因此互操作是微不足道的。
您也可以自己托管 CLR,虽然托管 API 是基于 COM 的,但您可以创建任何托管对象。这个过程并不困难,因为听起来一些 API 调用封装了很多功能。网上有很多信息,例如关于“托管公共语言运行时”的 MSDN 文档。
有一种从 .NET 类/方法导出 C 样式 API 的“未记录”方式。
这最终会导致 .NET dll 导出了可以从 C/C++ 调用的 API 或任何可以使用 .DLL 的东西。
如果您喜欢“阅读”(beh ;),您可以得到一本书,名为:Inside Microsoft® .NET IL Assembler,您将在第 15 章中找到该技术:“托管方法作为非托管导出”
还有一个关于代码项目的很好的示例项目,您可以将其用作 32 位环境的起点:http: //www.codeproject.com/KB/dotnet/DllExport.aspx
您可以在 C++ 项目中逐个文件决定是否使用托管 C++。尝试更改项目中文件的设置,使其按托管方式编译。将调用放在您的 C# 对象中。
跨越 C++/C# 边界是有代价的,所以你应该分析在哪里做。就像,您不想在循环中执行此操作。
我是jni4net的作者,它是 JVM 和 CLR 之间的开源进程内桥梁。它建立在 JNI 和 PInvoke 之上。无需 C/C++ 代码。我希望它会帮助你。