【问题标题】:.NET CLR InternalCall.NET CLR 内部调用
【发布时间】:2009-08-23 05:40:11
【问题描述】:

有没有办法托管 .NET CLR 运行时并注册 MethodImplOptions.InternalCall 函数? (这不是关于 P/Invoke 的话题)

【问题讨论】:

    标签: c# .net clr


    【解决方案1】:

    SSCLI 代码(特别是 clr\src\vm\ecall.cpp)表明无法注册 InternalCall 方法,因为关键的 gECClasses 表是硬编码的。

    【讨论】:

    • 实际 API 与共享源版本不同吗?
    • 他们肯定是,但如何?.. 我只能建议启动你的 IDA 和 - 一方面是公共符号,另一方面是 SSCLI 代码 - 潜入mscorwks.dll
    • 我看到很多人在论坛上问这个问题——他们要么想在 C++ DLL 中调用某些东西,并认为这可能是这样做的方法,要么他们从不说出他们的意思想要做。无论哪种方式,答案都是“否”。出于兴趣,您为什么要这样做?
    • FWIW,我已经在汇编程序级别调试到 mscorwks.dll 以修复 .NET 加载程序的问题并调查 tail. call 的行为,并且可以确认在这两种情况下都存在确切的对应关系在 SSCLI 和实际机器代码之间。据我所见,SSCLI 的大部分内容与 CLR 相同,只有 GC 和 codegen 等敏感内容有显着不同,其他内容则省略了。
    • @Earwicker。我需要避免 P/Invok 的编组成本。在这种情况下,C++/CLI 可能是我要走的路。另外,我想知道是否可以在 VM 中创建一些额外的 MSIL 功能。
    【解决方案2】:

    IMetaDataImport 是您最好的选择,但不能保证这一点。这似乎是 C++/CLI 的一项特定任务。

    【讨论】:

    • 这里的“离题”到底是什么?如果无法使用 COM api 使 InternalCall 工作,P/Invoke 不是一个选项,那么 C++/CLI 是最好的(唯一?)管理方式->非管理方式。
    • InternalCall 低于 CLI 的级别,所以是 C++/CLI。 jameszhao 的问题非常具体,他想要什么。
    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2012-04-24
    • 2011-05-20
    • 2011-01-18
    • 1970-01-01
    • 2011-04-01
    相关资源
    最近更新 更多