在不使用COM的情况下从C ++调用C#方法

有没有办法创建C#对象并从非托管C ++调用方法,但没有使用COM Iterop? 我正在寻找像JNI(但对于.Net)这样的东西,你可以手动创建VM,创建对象等。

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

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

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

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

如果您正在“阅读”(beh;),您可以获得一本名为: InsideMicrosoft®.NETIL Assembler的书 ,您将在第15章中找到这种技术:“托管方法作为非托管导出”

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

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

跨越C ++ / C#边界需要花费成本,因此您应该分析在哪里进行操作。 就像,你不想在循环中做到这一点。

我是jni4net的作者, jVM和CLR之间的开源内部进程桥。 它建立在JNI和PInvoke之上。 不需要C / C ++代码。 我希望它会对你有所帮助。