4

我在 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);
4

2 回答 2

7

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

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

现在您可以使用 vtOptional 作为您不想指定的参数是否为可选参数。

这是官方的说法:“在 Visual C++ 中调用函数时如何传递可选参数

于 2009-02-24T06:15:58.137 回答
-2

未指定的变体通常是 VT_EMPTY:

_variant_t vtEmpty(VT_EMPTY);

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

于 2008-12-20T00:38:34.953 回答