使用参数动态调用dll和方法
基本上我试图通过名称调用一个DLL,实例化一个对象,然后在该DLL中按名称调用一个方法。 我得到了一个“调用目标引发了exception。” 在Method.Invoke期间。 我很确定我的问题是对方法的参数进行类型转换。 我想知道是否有人对此exception有任何意见。 此外,欢迎任何有关如何修改我的方法的建议。
public void calldll(string dllName, string typeName, string methodName, string arguments) { string[] argumentArray = arguments.Split(new char[] { '|' }, StringSplitOptions.None); Assembly assembly = Assembly.LoadFrom(dllName); System.Type type = assembly.GetType(typeName); Object o = Activator.CreateInstance(type); MethodInfo method = type.GetMethod(methodName); ParameterInfo[] parameters = method.GetParameters(); object[] methodParameters = new object[parameters.GetLength(0)]; for (int i = 0; i < parameters.Length - 1; i++) { var converter = TypeDescriptor.GetConverter(parameters[i].GetType()); methodParameters[i] = converter.ConvertFrom(argumentArray[i]); } method.Invoke(o, methodParameters); }
我发现你的代码存在两个问题:
- 您没有循环遍历所有
parameters
。 你应该从for
循环中删除-1
。 - 在创建转换器时,可以调用
GetType()
方法。 这将返回ParameterInfo
对象的Type
,而不是ParameterInfo
的Type
。 请改用ParameterType
属性。
总而言之,将for
循环中的第一行更改for
:
for (int i = 0; i < parameters.Length; i++) { var converter = TypeDescriptor.GetConverter(parameters[i].ParameterType);
完成这些更正后,我相信您的代码应按预期运行。 当我测试一个简单的void Hello(int x, string y)
方法时,至少它对我有用。