gpt4 book ai didi

c# - 使用参数动态调用 dll 和方法

转载 作者:太空狗 更新时间:2023-10-29 21:45:56 25 4
gpt4 key购买 nike

基本上,我尝试按名称调用一个 dll,实例化一个对象,然后按名称在该 dll 中调用一个方法。我收到“调用目标已抛出异常”。在 Method.Invoke 期间。我很确定我的问题出在方法参数的类型转换上。我想知道是否有人对此异常有任何意见。此外,欢迎就如何修改我的方法提出任何建议。

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); }

最佳答案

我发现您的代码有两个问题:

  1. 您没有遍历所有参数。您应该从 for 循环中删除 -1
  2. 创建转换器时,调用 GetType() 方法。这将返回 ParameterInfo 对象的 Type,而不是参数的 Type。请改用属性 ParameterType

总而言之,将 for 循环中的第一行更改为:

for (int i = 0; i < parameters.Length; i++)
{
var converter = TypeDescriptor.GetConverter(parameters[i].ParameterType);

完成这些更正后,我相信您的代码应该可以按预期运行。至少当我测试一个简单的 void Hello(int x, string y) 方法时它对我有用。

关于c# - 使用参数动态调用 dll 和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com