簡體   English   中英

使用參數動態調用dll和方法

[英]Dynamically calling a dll and method with arguments

基本上我試圖通過名稱調用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. 您沒有循環遍歷所有parameters 你應該從for循環中刪除-1
  2. 在創建轉換器時,可以調用GetType()方法。 這將返回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)方法時,至少它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM