2008-11-10 92 views
6

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

+0

正则C++或托管C++? – 2008-11-10 13:01:36

回答

6

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

您也可以自己托管CLR,并且托管API是基于COM的,然后可以创建任何托管对象。这个过程并不困难,因为一些API调用封装了很多功能。网上有很多信息,例如“Hosting the Common Language Runtime”上的MSDN文档。

1

您可以在C++项目中决定是否使用托管C++ 。尝试更改项目中的设置文件,以便将其编译为托管。把这些调用放到你的C#对象中。

跨越C++/C#边界需要花费,所以你应该分析它在哪里做。就像,你不想在循环中做它。

3

从.NET类/方法导出C风格的API有一些“未公开”的方式。

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

如果你到“阅读”(BEH),你可以得到所谓的一本书:Inside Microsoft® .NET IL Assembler在那里你会在第15章发现了这种方法:“管理方法为托管输出”

还有一个很好的例子在代码项目的项目可以作为起点为32位环境中使用: http://www.codeproject.com/KB/dotnet/DllExport.aspx

1

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

相关问题