C# invoke方法的参数个数不匹配

C# invoke方法的参数个数不匹配,第1张

这个问题很明显啊,你调用methodInfoInvoke 方法的时候没有传递参数进去,参数不匹配,当然报错了。在使用反射机制动态调用方法时,你先要知道此方法需要什么参数,参数的类型,参数的个数等等。比方说我有一个方法:publc void TestMethod(int a, int b); 那么你调用的时候就要这样写:

int a = ;

int b = ;

methodInfoInvoke(this, new object[] { a, b });

所以你这个ExecuteSense 方法的签名应该改为:

public object ExecuteSense(string senseMethod, obejct[] args);

参数在外部传入。

SystemReflectionAssembly dll = SystemReflectionAssemblyLoadFile("文件路径");

Stream xmls = dllGetManifestResourceStream("adll的命名空间项目中的文件路径文件名");

后面就可以把这个xml作为正常的xml文件的流来使用了。

不好意思,只是按照自己的想法写的。没有去实践。

这个问题是我写错函数了。用load函数的话。参数是dll的命名空间。我已经改了上面的source。

你试一下。

试了一下,这样就好用了。

LoadFile,中的参数是你的dll的路径。不是xml的路径。

Assembly

ass

=

AssemblyLoadFrom("SystemWindowsFormsdll");

//加载一个程序集

var

form

=

assGetType("SystemWindowsFormsForm");

//获取一个类型,需要全名称

Dictionary<string,

MethodInfo>

d

=

new

Dictionary<string,

MethodInfo>();//获取所有方法

//formGetMethods(BindingFlagsPublic|

BindingFlagsInstance)

可以指定

方法的一些特性

foreach(var

mi

in

formGetMethods())

{

dAdd(miName,

mi);

//添加到字典中

}

可以做到:

private void button3_Click(object sender, EventArgs e)

{

Assembly ass = AssemblyLoadFrom("ClassLibrary1dll");//AssemblyXXXXX根据你的实际加载程序集,

Type[] types = assGetTypes();

foreach (Type t in types)//获取所有类型的Type,可按业务排除

{

MethodInfo[] methods = tGetMethods(BindingFlagsPublic| BindingFlagsInstance| BindingFlagsDeclaredOnly);//根据BindingFlag过滤方法

foreach(MethodInfo m in methods)

{

comboBox1ItemsAdd(m);//加入到comboBox1

}

}

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

MethodInfo method = comboBox1SelectedItem as MethodInfo;

if (method != null)

{

listBox1ItemsClear();

ParameterInfo[] parameters = methodGetParameters();//获取参数

foreach (ParameterInfo p in parameters)

{

listBox1ItemsAdd(stringFormat("参数名:{0},类型:{1}", pName, pParameterType));//加入参数到listBox1,可以根据p属性获取其它信息

}

}

}

若还有疑问请加NET初学者群:133212611

首先你要知道DLL里所有的动态函数,不知道的话就不能导入,然后用导入函数获取DLL里的函数,每种语言都有自己的导入函数,网上或MSDN里都有自己查就OK了 不知道就不好办了,基本上是没办法解决,一般动态库在公布时都有说明文档

以上就是关于C# invoke方法的参数个数不匹配全部的内容,包括:C# invoke方法的参数个数不匹配、C#中,如何通过反射获取dll中的嵌入资源、C# 如何将通过反射获得的 MethodInfo 类添加到 Dictionary 中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9460423.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存