Передача массива параметров с помощью 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
Метод и метод, вызываемый отражением, должны быть в порядке.