我想和反射来调用类的每一个方法,但我不能调用方法与指针作为参考。 通常我只可以传递null每个指针我发现,一切都将被罚款。 问题是,当函数改掉访问我通过指针。 指针是将内存地址为0的参考,这是很明显对我的计划瞬间崩溃。 所以,我需要一个指针传递给有效的内存ADRESS,但我不知道我怎么可以在运行时创建一个指针
我的代码的压缩版本:
class Program
{
static void Main(string[] args)
{
var obj = new TestClass();
var pointerMethod = obj.GetType().GetMethod("Test");
var referenceMethod = obj.GetType().GetMethod("Test2");
var pointerParameter = pointerMethod.GetParameters()[0];
var referenceParameter = referenceMethod.GetParameters()[0];
//Get the instance of the class that is referred by the pointer/reference
var pointerInstance = Activator.CreateInstance(pointerParameter.ParameterType.GetElementType());
var referenceInstance = Activator.CreateInstance(referenceParameter.ParameterType.GetElementType());
//Call the method and "cast" the char instance into an pointer
pointerMethod.Invoke(obj, new[] {pointerInstance.GetType().MakePointerType()});
referenceMethod.Invoke(obj, new[] { referenceInstance.GetType().MakeByRefType() });
}
}
和识别TestClass:
public class TestClass
{
unsafe public void Test(char* pointer)
{
}
public void Test2(ref int reference)
{
}
}
我一直得到的异常“System.RuntimeType”不能转换为类型“System.Char *”奇怪的是,pointerInstance.GetType()。MakePointerType()返回一个char *,正是我要传递到功能...