【OLE】オートメーション総合スレ【ActiveX】

このエントリーをはてなブックマークに追加
133デフォルトの名無しさん
>>114
Excelのカスタムインターフェースを直に呼んでみた。(ヘッダがいいかげんだけど気にしないで(^^;))

XLASMP1.LZH:Excelのカスタムインターフェースを利用するサンプル(C++)
http://winscript.s41.xrea.com/upload/source/No_0011.lzh

Addメソッドのプロトタイプはこんな感じ。

STDMETHOD(Add)(VARIANT Template, long lcid, IWorkbook** RHS) = 0; //'Workbook'インターフェースを'IWorkbook'に変えてある。

そうしたら、ワークブック作成が成功するのはVT_EMPTY、でなく、VT_ERROR / DISP_E_PARAMNOTFOUND、だね。

MFCのディスパッチマッパーは省略の場合途中でなくてもVT_ERRORを入れる、ということか。VBではVT_EMPTYだと。

MFCだとウィザードはCOleVariant型を引数にとるテンプレかオーバーロードを生成しているみたいだけど、生のインターフェースはVARIANT型。戻り値がHRESULTなのも違う。
これ(MFC)はカスタムインターフェース(アーリーバインディング)になってるのかな?

だから必ず同じ結果になるとは言わないけど、114、VT_ERRORで試してみて。なお、vt=VT_ERRORするだけでなくて、ちゃんと省略を表すエラーコード、scode=DISP_E_PARAMNOTFOUNDを入れないと動かないから。

で、確かに1でもできるね・・・これ何なんだろ。レガシー定数だとか。他の定数が3,4になってて1,2が抜けてるのがそれっぽい。昔の文書とかには1が書いてあるのかも。