在VC ++中将可选参数传递给COM函数

时间:2008-12-19 22:53:34

标签: visual-c++ com arguments

我在COM对象上有一个MFC包装器。有一个函数需要大量的选项,这些选项大多是可选的。我如何传递一些参数但不传递其他参数?

对于它的价值,可选参数列为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 个答案:

答案 0 :(得分:5)

要跳过COM方法中的可选参数,请传递类型为VT_ERROR的VARIANT,错误代码必须为DISP_E_PARAMNOTFOUND。

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

现在你可以使用vtOptional作为参数,如果参数是可选的,你不想指定。

这是关于此的官方消息: “How to pass optional parameters when you call a function in Visual C++

答案 1 :(得分:-2)

未指定的变体通常是VT_EMPTY:

_variant_t vtEmpty(VT_EMPTY);

您显然已经在COM接口周围编写了CDocuments和CApplication包装器,因此您可以将可选参数指定为具有默认值vtEmpty。