2008-12-19 112 views
2

我有一个MFC包装器通过COM对象。有一个函数需要大量的选项,这些选项大多是可选的。我如何传递一些论点而不是其他人?将可选参数传递给VC++中的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); 

回答

-1

未指定的变种通常是VT_EMPTY:

_variant_t vtEmpty(VT_EMPTY); 

你明明写的COM接口周围的CDocuments和CApplication包装,所以你可以指定可选的参数作为vtEmpty的默认值。

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++