hspcbcom
Version 0.1
Date 2026/04/14
Author IronHSP project
hspcbcom - COM コールバックインターフェース
#cbmethod
COM コールバッククラスにメソッドを登録する
#defcbcom ~ #endcbcom の中で使い、各 vtable slot に対応する HSP ラベルを宣言する。
ラベルは前方参照可能 (定義より前に書ける)。
引数列の最後はかならず *label で終わる。
#defcbcom
COM コールバックインターフェース クラス定義開始
HSP 側で COM インターフェース (例: IDropTarget, IBindStatusCallback) を実装するための
クラス宣言を開始する。中に #cbmethod を列挙してメソッドを vtable index にマッピングする。
最後に #endcbcom で締める。
#endcbcom
COM コールバッククラス定義終了
#defcbcom で開始したクラス定義を確定する。この時点で hspcmp が登録 bytecode を発行し、
ランタイム実行時にクラスが自動的に登録される。
comcbidx
現在のコールバックの vtable index を取得する
複数メソッドを同じラベルにマッピングしたとき、どの index で呼ばれたかを判別するために
使う。
comcbis
現在のコールバックの this が指定 comobj と一致するか確認する
1 つの class から複数 instance を作って使い分けるとき、現在のコールバックがどの instance
から呼ばれたかを判別するために使う。一致すれば 1、それ以外は 0 を返す。
comcbtag
現在のコールバックの int tag を取得する
newcomcb 時に指定した int tag を返す。string tag を指定していた場合は 0、tag を省略
していた場合は instance ごとに自動採番された ID (1, 2, ...) が返る。
comcbtags
現在のコールバックの string tag を取得する
newcomcb 時に指定した string tag を返す。int tag だった場合や省略していた場合は空文字列
を返す。
comcbthis
現在のコールバックの raw IUnknown* を取得する
高度な用途向け。コールバック内から自分自身 (this) の IUnknown* (intptr 値) を取得する。
これを別の COM API に渡して再帰的に登録する等に使える。
comprm
コールバック中の引数を取得する
現在実行中のコールバックメソッドの N 番目の引数を、#cbmethod で宣言した型に従って
HSP 値として取得する。
comret
コールバックの戻り値 (HRESULT) を設定する
コールバック内から呼んで、外部 COM caller に返す HRESULT を設定する。省略すると
S_OK (0) が返される。明示的に E_FAIL や E_NOTIMPL を返したい場合は comret <val> を呼ぶ。
newcomcb
COM コールバッククラスのインスタンスを生成する
指定したクラスの新しいインスタンスを作成し、var に格納する。tag は callback 内から
comcbtag() / comcbtags() で取り出せるので、複数 instance を作って使い分ける用途に便利。