Ваша проблема в том, что второй и третий параметры (pData
и pString
) помечены как [in, out]
в их определении, что означает, что они переводятся в ref
параметры в C #. Вам необходимо использовать перегрузку InvokeMember
, которая принимает аргумент ParameterModifier[]
, чтобы указать, что эти аргументы должны передаваться по ссылке, а не по значению. Массив ParameterModifier
должен содержать один элемент, который определяет второй и третий индексы как true
, чтобы указать, что они передаются по ссылке.
ParameterModifier modifier = new ParameterModifier(3);
modifier[1] = true;
modifier[2] = true;
Object result = so.GetType().InvokeMember(
"TestFunc", // name
BindingFlags.InvokeMethod, // invokeAttr
null, // binder
so, // target
args, // args
new ParameterModifier[] { modifier }, // modifiers
null, // culture
null // namedParameters
);