将C#方法暴露给非托管代码

6
那个“可能是重复的”方法与书中的方法不同。该书的方法是通过反编译、重新编译的过程来扩展托管的.dll。你认为是完全相同的方法实际上是一种预编译技术。我更喜欢书中的方法,因为它更具AOP风格。谢谢你提供的链接。我也会探索这个方法。在《Expert .NET 2.0 IL Assembler》的第18章第387页中,Serge Lidin谈到了创意往返。他说:“ILAsm允许您将托管方法导出为非托管入口点”。我还没有在其他地方听说过这个问题。PostSharp可以做到这一点吗?是否有可下载的代码/脚本示例可供使用这种技术?澄清一下,我不想使用COM或Managed C++。那么从C/C++调用C#方法的最佳方法是什么?

3
这个问题的底部回答链接到了一个名为Unmanaged Exports的东西,听起来像是你引用的内容。 - Rup
@Rup:是的,谢谢你指出来。可惜没有可下载的工作示例。 - sgtz
@MarcGravel:你认为关闭这个问题是正确的做法吗? - sgtz
1
你说没有可下载的工作示例是什么意思?我已经从Robert的网站下载了代码。运行良好。 - David Heffernan
2
@DavidHefferman:当时正忙着做点事,随手在不看的情况下输入了网址,以为自己完全记住那个链接的内容了。结果我没记住,还是将它下载下来了。它运作良好吗?太棒了!我迫不及待想试试它的效果。这个托管代码也表现不错吗? - sgtz
显示剩余5条评论
1个回答

3

使用ildasm,更改corflags,添加v-table信息和导出函数,再用ilasm即可完成。

这里有一篇Code Project文章: http://www.codeproject.com/Articles/37675/Simple-Method-of-DLL-Export-without-C-CLI

其中引用了:

失效链接: http://www.csharphelp.com/2007/03/exporting-managed-code-as-unmanaged/

Wayback Machine对失效链接的备份: https://web.archive.org/web/20140213030149/http://www.csharphelp.com/2007/03/exporting-managed-code-as-unmanaged/

该方法基于: http://www.amazon.com/Inside-Microsoft-NET-IL-Assembler/dp/0735615470 (您参考的书籍的第一版)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接