Передача необязательных аргументов в функцию COM в VC ++ - PullRequest
2 голосов
/ 20 декабря 2008

У меня есть оболочка MFC поверх COM-объекта. Существует функция, которая принимает большое количество опций, которые в основном являются необязательными. Как я могу передать некоторые аргументы, но не другие?

Для чего бы то ни было, необязательные аргументы перечислены как VARIANT *.

Ниже приведен код

CComVariant vFalse = false;
CApplication application;

{
    application.CreateDispatch(_T("Word.Application"));

    CDocuments documents = application.get_Documents();       

    CComVariant vFilename = _T("c:\\temp\\test.rtf");
    CComVariant vNothing;
    CComVariant vEmpty = _T("");
    CComVariant vOpenFormat = 0;
    application.put_Visible(TRUE);

    //
    // THIS FUNCTION has a number of optional arguments
    //
    LPDISPATCH pDocument = documents.Open(&vFilename, &vFalse, &vFalse, &vFalse, &vEmpty, &vEmpty, &vFalse, &vEmpty, &vEmpty, &vOpenFormat, &vOpenFormat, &vFalse, &vFalse, &vOpenFormat, &vFalse, &vFalse);
}
application.Quit(&vFalse, NULL, NULL);

Ответы [ 2 ]

5 голосов
/ 24 февраля 2009

Чтобы пропустить необязательный параметр в методе COM, передайте VARIANT типа VT_ERROR, а код ошибки должен быть DISP_E_PARAMNOTFOUND.

CComVariant vtOptional;
vtOptional.vt = VT_ERROR;
vtOptional.scode = DISP_E_PARAMNOTFOUND;

Теперь вы можете использовать vtOptional в качестве параметра, который вы не хотите указывать, если параметр является необязательным.

Вот официальное слово об этом: " Как передать необязательные параметры при вызове функции в Visual C ++ "

0 голосов
/ 20 декабря 2008

Неуказанный вариант обычно VT_EMPTY:

_variant_t vtEmpty(VT_EMPTY);

Вы, очевидно, написали обертки CDocuments и CApplication вокруг COM-интерфейсов, поэтому вы можете указать дополнительные параметры как имеющие значение по умолчанию vtEmpty.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...