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 に答える