2008-12-19 5 views
2

J'ai un wrapper MFC sur un objet COM. Il y a une fonction qui prend un grand nombre d'options, qui sont pour la plupart optionnelles. Comment puis-je transmettre certains arguments mais pas d'autres?Passage d'arguments facultatifs à une fonction COM dans VC++

Pour ce que cela vaut, les arguments facultatifs sont répertoriés comme VARIANT *.

Voici le code

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

Répondre

-1

Une variante non spécifiée est normalement VT_EMPTY:

_variant_t vtEmpty(VT_EMPTY); 

Vous avez évidemment écrit les CDocuments et les emballages de CApplication autour des interfaces COM, vous pouvez spécifier les paramètres facultatifs comme ayant la valeur par défaut de vtEmpty.

5

Pour ignorer un paramètre facultatif dans une méthode COM, passez un VARIANT de type VT_ERROR et le code d'erreur par DISP_E_PARAMNOTFOUND.

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

Maintenant vous pouvez utiliser vtOptional comme paramètre que vous ne voulez pas spécifier si le paramètre est facultatif.

est ici le mot officiel sur ce point: "How to pass optional parameters when you call a function in Visual C++"

Questions connexes