Прохождение DISPPARAMS - PullRequest
       7

Прохождение DISPPARAMS

0 голосов
/ 25 мая 2018

Я тестирую модуль со следующей сигнатурой:

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, как вы могли догадаться.

1 Ответ

0 голосов
/ 25 мая 2018

new кажется, что объект работает.ТБХ, я не знаю, что происходит.

CComPtr<Mock_Item> mock_Item = new Mock_Item;
...
dp.rgvarg[1].pdispVal = mock_Item;
dp.rgvarg[1].vt = VT_DISPATCH;
...