Получение параметра ref из COM с помощью вызова InvokeMember
Я пытаюсь вызвать метод COM-сервера с помощью InvokeMember. Метод имеет следующую подпись:
void InsUpdOpInstance(
[in] long inIdOperDescr,
[in] long inIsWait,
[in] VARIANT stVariables,
[in] long inIdProc,
[in, out] VARIANT* inIdOperInst,
[out] VARIANT* inReturnCode,
[out] VARIANT* stErrorMessage);
Моя проблема возвращает значение параметра inIdOperInst. Следующий код не работает:
var parameters = new object[] {12,0,"test",25655,DBNull.Value,null,null};
ParameterModifier modifier = new ParameterModifier(parameters.Length);
modifier[4] = true;
modifier[5] = true;
modifier[6] = true;
var ret = WFType.InvokeMember("InsUpdOpInstance",BindingFlags.InvokeMethod,null,Server,parameters,new ParameterModifier[]{modifier},null,null);
После вызова параметров [4] значение не изменяется
Следующий код работает нормально:
dynamic serv = Server;
object inError = null;
object stError = null;
object inId = DBNull.Value;
serv.InsUpdOpInstance(12,0,"test",25655,ref inId,out inError,out stError);
После вызова параметра значение inId было изменено
Почему InvokeMember не работает?
1 ответ
Следующий код работает нормально:
var parameters = new object[] {12,0,"test",25655,new System.Runtime.InteropServices.VariantWrapper(DBNull.Value),null,null};
ParameterModifier modifier = new ParameterModifier(parameters.Length);
modifier[4] = true;
modifier[5] = true;
modifier[6] = true;
var ret = WFType.InvokeMember("InsUpdOpInstance",BindingFlags.InvokeMethod,null,Server,parameters,new ParameterModifier[]{modifier},null,null);
Исправление заключается в переносе параметра ref в класс System.Runtime.InteropServices.VariantWrapper.