2008-12-19 113 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++