Передача массива параметров с помощью ref в C# DLL через Reflection

Все, у меня есть несколько 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);
    }
}

Я хотел бы знать, как я могу передать массив параметров в DLL как ref так что я могу извлечь информацию из того, что произошло внутри DLL. Четкое изображение того, что я хочу (но, конечно, не будет компилироваться) будет

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

Как мне этого добиться?

1 ответ

Решение

Изменения в ref параметры отражаются в массиве, который вы передаете в MethodInfo.Invoke, Вы просто используете:

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

Обратите внимание, что если рассматриваемый параметр является массивом параметров (в соответствии с вашим заголовком), вам нужно обернуть его в другой уровень массивности:

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

Что касается CLR, то это всего лишь один параметр.

Если это не помогает, пожалуйста, покажите короткий, но полный пример - вам не нужно использовать отдельную DLL для демонстрации, просто консольное приложение с Main Метод и метод, вызываемый отражением, должны быть в порядке.

Другие вопросы по тегам