1

ikvmc を使用して JAR を DLL にコンパイルすると、次のようなおかしな名前のメソッドとクラスが生成されます。

TestClass.__<clinit>(object X);

また

TestClass$1.MethodName();

C# クライアントからそれらを呼び出したり、オーバーライドしたりしたいと考えています。リフレクションを使用せずにこれを達成するにはどうすればよいですか?

更新:呼び出すだけでなく、継承されたクラスでもオーバーライドします...

4

1 に答える 1

2

少なくともデリゲートの作成にはリフレクションを使用する必要があります。

var assembly = typeof(SomeJarToDllAssembly.SomeType).Assembly;
var type_TestClass1 = assembly.GetType("TestClass$1");
var method_clinit = type_TestClass.GetMethod("__<clinit>");
var dlgClinit = (Action<object>)Delegate.Create(type_TestClass, method_clinit);

// call delegate like normal method (it's fast as normal method calling)
dlgClinit(new object());

デリゲートを正しく作成する方法はいくつかあります。MSDN リファレンス ガイドを参照してください: System.DelegateCreateDelegateメソッド。

于 2011-07-28T11:33:19.760 に答える