[英]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); }
我發現你的代碼存在兩個問題:
parameters
。 你應該從for
循環中刪除-1
。 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.