MoonKnight
MoonKnight

Reputation: 23831

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?

Upvotes: 0

Views: 1560

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1504052

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.

Upvotes: 2

Related Questions