掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
「複数のOptional引数」を持つCOMのメソッドをC++で実装するには? (ID:70018)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>VARIANT fileName, updateLinks, readOnly; > >VariantClear(&fileName); >VariantClear(&updateLinks); >VariantClear(&readOnly); VariantClearは変数の状態によりメモリの解放を行うので未初期化の変数に使うのは危険です。 VARIANT変数の初期化にはVariantClearではなく、VariantInitを使用してください。 >::SysFreeString(fileName.bstrVal); こちらはVariantClearをfileNameに対して行えばメモリは解放されるので、 上記SysFreeStringは呼ぶ必要はありません。 (VariantClearで開放しない場合は必要です) >AutoWrap関数の第5引数を1にする(Openメソッドに渡す実引数の個数を1つだけにする)と正常にファイルを開けるのですが、これではreadOnlyで開くことはできません。 > >Openメソッドのように複数のOptional引数を持つCOMメソッドを特定の引数までを渡す場合、上記のコードでは問題があるのでしょうか? IDispatch::Invokeに渡すパラメーターの配列は引数の逆順に作る必要がありますが AutoWrap関数の内容を見る限り、特に順序の入れ替えなどは行ってないようです。 >AutoWrap(DISPATCH_METHOD, &result, pBooks, L"Open", 3, fileName, updateLinks, readOnly); ↓ AutoWrap(DISPATCH_METHOD, &result, pBooks, L"Open", 3, readOnly, updateLinks, fileName); に書き換えてみてもダメでしょうか?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.