通过反射将参数数组通过引用传递给 C# DLL

本文关键字:DLL 数组 反射 参数 引用 | 更新日期: 2023-09-27 18:35:34

所有,我有许多 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);

我怎样才能做到这一点?

通过反射将参数数组通过引用传递给 C# DLL

ref参数的更改将反映在传入MethodInfo.Invoke的数组中。您只需使用:

object[] parameters = ...;
result = methodInfo.Invoke(classInstance, parameters);
// Now examine parameters...

请注意,如果相关参数是参数数组(根据您的标题),则需要将其包装在另一个级别的数组中:

object[] parameters = { new object[] { "first", "second" } };

就 CLR 而言,它只是一个参数。

如果这没有帮助,请显示一个简短但完整的示例 - 你不需要使用单独的 DLL 来演示,只需一个具有Main方法的控制台应用和一个由反射调用的方法应该没问题。