У меня есть COM-компонент, который я хочу вызвать с использованием позднего связывания из VB.NET (используя болезненную сборку первичного взаимодействия - метод PIA)
Моя подпись IDL для метода COM выглядит следующим образом:
HRESULT Send([in]BSTR bstrRequestData,
[out]VARIANT *pvbstrResponseData,
[out]VARIANT *pvnExtCompCode,
[out,retval]int *pnCompletionCode);
Итак, 2 параметра «ByRef» в языке VB.NET и возвращаемое значение.
Я пытаюсь вызвать этот метод следующим образом:
Dim parameters(2) As Object
parameters(0) = "data"
parameters(1) = New Object()
parameters(2) = New Object()
Dim p As New ParameterModifier(3)
p(1) = True
p(2) = True
Dim parameterMods() As ParameterModifier = {p}
objReturn = MyObject.GetType().InvokeMember("Send", _
BindingFlags.InvokeMethod, _
Nothing, _
MyObject, _
parameters, _
parameterMods, _
Nothing, _
Nothing)
Это происходит неэффективно, за исключением: {"Invalid callee. (Exception from HRESULT: 0x80020010 (DISP_E_BADCALLEE)))"}
Полагаю, это означает, что я что-то не так делаю в своем массиве parameterMods. Потому что, если я закомментирую установку любого значения массива ParameterMods в «True» - это работает. Конечно, он не обновляет параметры, которые являются [out] параметрами, и поэтому не работает должным образом.
Есть что-то еще, чтобы рассмотреть, так как метод также имеет возвращаемое значение? Пример MSDN в значительной степени делает именно то, что я делаю, за исключением того, что в примере не было возвращаемого значения. Любая помощь приветствуется.