
这个问题很明显啊,你调用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 中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)