これの最終目標は何ですか?アンマネージ コードに渡す関数ポインターが必要ですか? その場合、それは機能しないためです。RVA は、プロセスが実行できないネイティブ コードではなく、IL コードのみを指す可能性があります。
このデモでは、メソッドが Action シグネチャ (パラメーターなしで void 型を返す) に一致し、静的であり、クラス FullyQualified.TypeName で SomeMethod と呼ばれていると仮定します。ローカル スコープでアセンブリ参照 "asm" が与えられた場合:
Type t = asm.GetType("FullyQualified.TypeName");
MethodInfo method = t.GetMethod("SomeMethod", BindingFlags.Public | BindingFlags.Static);
この時点で、本当にメソッド本体が IL に必要な場合は、次を呼び出すことができます。
MethodBody body = method.GetMethodBody();
または、ネイティブコードに渡すことができるネイティブコードが必要な場合は、次のようにします。
Action action = (Action)method.CreateDelegate(typeof(Action));
IntPtr ptr = Marshal.GetFunctionPointerForDelegate(action);
インスタンス メソッドを見ている場合は、他にも必要なことがあります (たとえば、インスタンスを MethodInfo.CreateDelegate の 2 番目のパラメーターとして渡したり、バインディング フラグを変更したりする必要があります)。適切な権限があれば、このメカニズムを介してプライベート メソッドにアクセスすることもできます。