【问题标题】:Passing optional arguments to a COM function in VC++将可选参数传递给 VC++ 中的 COM 函数
【发布时间】:2010-09-27 19:17:10
【问题描述】:

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

【问题讨论】:

    标签: visual-c++ com arguments


    【解决方案1】:

    要跳过 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++"

    【讨论】:

      【解决方案2】:

      未指定的变体通常是 VT_EMPTY:

      _variant_t vtEmpty(VT_EMPTY);
      

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

      【讨论】:

        猜你喜欢
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 2018-11-03
        相关资源
        最近更新 更多