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

时间:2008-11-10 13:00:27

标签: c# .net c++ com interop

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

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

跨越C ++ / C#边框需要付出代价,因此您应该分析在哪里进行操作。就像,你不想在循环中做到这一点。

答案 3 :(得分:1)

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