2010-12-16 58 views
5

有没有一种方法可以从C++非托管应用程序调用c#dll而不使用COM?从没有COM的非托管C++应用程序调用C#dll

+0

您可以随时[embed Mono](http://www.mono-project.com/Embedding_Mono)... – cdhowie 2010-12-16 21:46:54

+0

可以通过混合模式DLL完成。 – 2010-12-16 22:28:30

+0

[Calling C#code from C++]可能的重复(http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c) – cdiggins 2014-04-20 13:10:43

回答

5

你可以做到这一点使用Reverse P/Invoke - 例如和讨论here

+1

谢谢。那很有意思。 – 2010-12-16 22:07:35

0

你唯一的选择的确是使用C++ .net或为它创建一个C++ .net包装器,用于导出你需要的东西。

Calling C# code from C++

2

实际上可以反汇编,修改IL,然后用导出的函数重组它。几年前我就搞砸了,创建了一个可以反汇编DLL的应用程序,提供可能导出的函数列表 - 允许用户选择它们,然后重写IL并重新组合所有内容。然后,我可以直接从非托管代码调用dll ...或者从托管代码中调用dll(不太实际,但很有趣)。

毫无疑问,这是在.net语言本身不支持的原因(即使是MSIL支持它也是如此)。有点晚

http://www.csharphelp.com/2007/03/exporting-managed-code-as-unmanaged/

+1

它在C++/CLI中受支持,当您__declspec(dllexport)静态C++/CLI函数时,它会自动创建一个将加载CLR的thunk。当然,这是大伎俩,不能在不加载CLR的情况下运行托管代码。 – 2010-12-16 22:29:35

+0

@Hans当您将输出添加到IL时,ILASM将完成您的程序集所需的所有操作,就好像它是本机程序一样。 – 2011-01-05 15:02:14

1

我可能是,但检查出this:我不会在生产中使用这个。

使用这个小小的msbuild任务,您可以创建一个C#库,该库可以像调用本机DLL一样调用。 (例如,为需要它们为本地dll的应用程序编写插件)

哦,不要忘记使用project template,它会为您设置所有内容。

相关问题