Open
Description
We can't get ClrMethod of TestStruct.Test by GetMethodByHandle.
interface ITest
{
int Test();
}
struct TestStruct: ITest
{
public int Test()
{
return 123;
}
}
I think following behavior is related to this issue.
unsafe
{
var fp = typeof(TestStruct).GetMethod("Test")!.MethodHandle.GetFunctionPointer();
delegate* <ITest, int> f = (delegate* <ITest, int>)fp;
Console.WriteLine(f(new TestStruct()));//123
TestDelegate testDelegate = typeof(TestStruct).GetMethod("Test")!.CreateDelegate<TestDelegate>();
var testStruct = new TestStruct();
Console.WriteLine(testDelegate(ref testStruct));//123
var field =typeof(Delegate).GetField("_methodPtrAux", BindingFlags.NonPublic | BindingFlags.Instance);
var methodPtr = (IntPtr)field.GetValue(testDelegate);
Console.WriteLine((( delegate* <ref TestStruct, int>)methodPtr)(ref testStruct));
field = typeof(Delegate).GetField("_methodPtr", BindingFlags.NonPublic | BindingFlags.Instance);
methodPtr = (IntPtr)field.GetValue(testDelegate);
Console.WriteLine(methodPtr == fp); //true
}
Metadata
Metadata
Assignees
Labels
No labels