Dot-Net
如何在 CIL DLL 中導出方法以便本地程序可以呼叫它?
我已經查看了 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 為您完成所有這些工作,前提是您不將導出表用於其他任何事情。
請注意,所有這些都是非常不便攜的。