简体   繁体   中英

Passing a Parameter Array by ref to C# DLL via Reflection

All, I have a number of C# DLLs that I want to call from my application at runtime using System.Reflection . The core code I use is something like

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

I would like to know how I can pass in the array of parameters to the DLL as ref so that I can extract information from what happened inside the DLL. A clear portrayal of what I want (but of course will not compile) would be

result = methodInfo.Invoke(classInstance, ref parameters);

How can I achieve this?

Changes to ref parameters are reflected in the array that you pass into MethodInfo.Invoke . You just use:

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

Note that if the parameter in question is a parameter array (as per your title), you need to wrap that in another level of arrayness:

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

As far as the CLR is concerned, it's just a single parameter.

If this doesn't help, please show a short but complete example - you don't need to use a separate DLL to demonstrate, just a console app with a Main method and a method being called by reflection should be fine.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM