6

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

4

4 回答 4

6

如果您使用的是 C++/CLI,那么您可以直接与托管世界和非托管代码进行交互,因此互操作是微不足道的。

您也可以自己托管 CLR,虽然托管 API 是基于 COM 的,但您可以创建任何托管对象。这个过程并不困难,因为听起来一些 API 调用封装了很多功能。网上有很多信息,例如关于“托管公共语言运行时”的 MSDN 文档。

于 2008-11-10T13:05:14.037 回答
3

有一种从 .NET 类/方法导出 C 样式 API 的“未记录”方式。

这最终会导致 .NET dll 导出了可以从 C/C++ 调用的 API 或任何可以使用 .DLL 的东西。

如果您喜欢“阅读”(beh ;),您可以得到一本书,名为:Inside Microsoft® .NE​​T IL Assembler,您将在第 15 章中找到该技术:“托管方法作为非托管导出”

还有一个关于代码项目的很好的示例项目,您可以将其用作 32 位环境的起点:http: //www.codeproject.com/KB/dotnet/DllExport.aspx

于 2008-11-10T13:14:04.423 回答
1

您可以在 C++ 项目中逐个文件决定是否使用托管 C++。尝试更改项目中文件的设置,使其按托管方式编译。将调用放在您的 C# 对象中。

跨越 C++/C# 边界是有代价的,所以你应该分析在哪里做。就像,您不想在循环中执行此操作。

于 2008-11-10T13:03:06.570 回答
1

我是jni4net的作者,它是 JVM 和 CLR 之间的开源进程内桥梁。它建立在 JNI 和 PInvoke 之上。无需 C/C++ 代码。我希望它会帮助你。

于 2009-10-31T20:03:38.533 回答