加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 如何导出CIL DLL中的方法,以便本地程序可以调用它?

发布时间:2020-12-14 01:46:33 所属栏目:Windows 来源:网络整理
导读:我已经审查了ECMA 335,我只发现了对.export关键字的引用,这个关键字看起来很有前途,但文档很少.我在StackOverflow中发现了类似的问题,在C#中这样做.但是,迄今为止,还没有任何一个有用的东西. 底线是:我有一个CIL DLL,我想从一个本机C应用程序调用其一些静态
我已经审查了ECMA 335,我只发现了对.export关键字的引用,这个关键字看起来很有前途,但文档很少.我在StackOverflow中发现了类似的问题,在C#中这样做.但是,迄今为止,还没有任何一个有用的东西.

底线是:我有一个CIL DLL,我想从一个本机C应用程序调用其一些静态方法.

在较新版本的ILAsm中,您可以简单地做:
.method public static void Foo ()
{
    .export [1]

    // code ...
}

这将导出表中的索引1中的Foo.导出序数应该是唯一的和顺序的.

在旧版本中,您必须做:

.data vt = int32 (0) [n]
.vtfixup [n] int32 fromunmanaged at vt

.method public static void Foo ()
{
    .vtentry 1:1
    .export [1]

    // code ...
}

(“n”是您想要的出口数量.)

.vtentry表示哪个vtable:slot存储方法(表ID是顺序的,因此取决于声明顺序.)

较新的ILAsms会为您完成所有这些工作,前提是您不要将导出表用于其他任何操作.

请注意,这一切都是非常不可取的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读