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

このエントリーをはてなブックマークに追加
131デフォルトの名無しさん
>>121
おお。オレもそれすっごく興味ある。できたら教えて下さい。
ファイルの拡張子関連付けのレジストリ設定ってあるじゃん? あれって2段階になってて例えば.htmの場合、これがhtmlfileを参照してる。
でここにHTMLDocumentオブジェクトのCLSIDが書いてあるんだよね。
だから独自のドキュメントファイル拡張子を作って、それの対応レジストリにCLSIDを書いておけば、IEがそのドキュメントを読み込もうとした時にサーバーが呼び出されてオブジェクトが生成されると思うんだよね。
そうしたらIEがオブジェクトに対してIOleObjectとかIOleControlとかIOleDocumentとかをQueryInterface()してくると思うから、それに対応できれば.xlsや.pdfと同じような事ができるんだと思う。ちなみにワード文書(.doc)とかもできるみたい。


>>123
いつもIDispatchを生の状態で実装したDLLサーバーをスクリプトから動かしてくるんだけれど、スクリプトエンジンは、途中省略の場合VT_ERRORを入れてくる。
VBでもC++でも(この場合コントローラって事ね)IDispatch::Invokeを使うのであればこれは同じようにしなければならない。(カスタムインターフェースを使えば違う)

cArgs=0の場合は基本的にrgvarg=NULLなのでパラメータはこの世に存在しない。
VBやMFCのディスパッチマップとかを使ってコンポーネント(サーバー)を製作している場合の話を言っているのかな、と思うけど、
その場合は、メソッド処理ルーチンから見ればcArgsなんて存在しないし、パラメータに何かは入ってなきゃいけないから、デフォルトがない場合バリアントのパラメータはVT_EMPTYだと思う。あればその値。
だけどコントローラがInvokeを使っている場合にはVT_EMPTYを入れてるのはコントローラではなくてコンポーネント内部のディスパッチマップハンドラだからね?

で114は引き数なしでもやってみた、って言ってるからメソッドに引き数無しのオーバーロードが存在するんでしょう。
であれば、「VBAで引き数無し」と同じ事をやる場合、114がやったように引き数なしでコールするのが正しいんじゃないか、と思うんだが。