Я тестирую модуль со следующей сигнатурой:
void foo(DISPPARAMS* pDispParams, VARIANT* pVarResult)
Мне нужно передать это pDispParams
извне, указывая на тип имитации, который у меня под рукой.Я создаю фиктивные типы с помощью GMock.
Я создаю фиктивный объект локально в стеке и пытаюсь передать его следующим образом:
Mock_Item mock_Item; //my mock type on which I would like to set expectations
DISPPARAMS dp = { nullptr, nullptr, 0, 0 };
VARIANT *args = new VARIANT[1];
VariantInit(&args[0]);
args[0].vt = VT_DISPATCH;
args[0].pdispVal = &mock_Item;
dp.rgvarg = args;
dp.cArgs = 1;
foo
, внутренне выполняетзатем
IDispatch* pCtrl(nullptr);
и пытается получить значение из pDispParams
, переданного ему
if (pDispParams != nullptr &&
pDispParams->rgvarg != nullptr &&
VT_DISPATCH == pDispParams->rgvarg[1].vt)
pCtrl = pDispParams->rgvarg[1].pdispVal;
, но при этом pCtrl
всегда оказывается nullptr
.Я не очень хорош в использовании этих типов, связанных с COM. Как мне заполнить VARIANT
и DISPPARAMS
, чтобы pCtrl
правильно указывал на мой фиктивный объект? В частности, мне кажется, что условие (VT_DISPATCH == pDispParams->rgvarg[1].vt
) не выполняется, так какЯ вижу в окне просмотра отладчика.Он имеет значение, которое не равно 9
(VT_DISPATCH
).Mock_Item
является производным от IDispatch
, как вы могли догадаться.