所有,我有许多C#DLL,我想在运行时使用System.Reflection
从我的应用程序调用。我使用的核心代码类似于
DLL = Assembly.LoadFrom(Path.GetFullPath(strDllName));
classType = DLL.GetType(String.Format("{0}.{0}", strNameSpace, strClassName));
if (classType != null)
{
classInstance = Activator.CreateInstance(classType);
MethodInfo methodInfo = classType.GetMethod(strMethodName);
if (methodInfo != null)
{
object result = null;
result = methodInfo.Invoke(classInstance, parameters);
return Convert.ToBoolean(result);
}
}
我想知道如何将参数数组作为ref
传递给DLL,这样我就可以从DLL中发生的事情中提取信息。清楚地描绘我想要的东西(但当然不会编译)将是
result = methodInfo.Invoke(classInstance, ref parameters);
我怎样才能做到这一点?
答案 0 :(得分:2)
ref
参数的更改会反映在您传递到MethodInfo.Invoke
的数组中。你只需使用:
object[] parameters = ...;
result = methodInfo.Invoke(classInstance, parameters);
// Now examine parameters...
请注意,如果有问题的参数是参数数组(根据您的标题),您需要将其包装在另一个数组级别中:
object[] parameters = { new object[] { "first", "second" } };
就CLR而言,它只是一个参数。
如果这没有帮助,请显示一个简短但完整的示例 - 您不需要使用单独的DLL来演示,只需使用Main
方法的控制台应用程序并且通过反射调用的方法应该没问题。