Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2007-11-28

COMのイベント (1)

| 03:29 |  COMのイベント (1) - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  COMのイベント (1) - Ci.nsIZIGOROu

まずは最初に参考サイトから。

参考サイト

TLI.TLIApplicationのInvoke系メソッド

iriyak:JScript:メソッド名が予約語と衝突

var tliapp = new ActiveXObject("TLI.TLIApplication");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var invokeId = tliapp.InvokeID(fso, "FileExists");
WScript.Echo(invokeId.toString(16));

こんなんでDISPIDが取れるみたい。これはDISPIDの取得だけだが、任意のメソッドコールを呼び出し方の指定をして行う事も可能。

var INVOKE_FUNC = 1;
var invokeId = 0x2720;
var ret = tliapp.InvokeHook(fso, invokeId, INVOKE_FUNC, "C:\\A.TXT");

IDispatch::Invoke()のwrapperみたいになってるみたいです。

これ結構突っ込んだ事まで出来そうな気がする。

COM Eventのメモ

mshtmlとかMicrosoft.XMLHttpRequestだっけ、とかとか。

JSから使われる前提の場合は、良くご存知の通りhandlerを参照で渡す事が可能で、

req.onreadystatechange = function(evt) {}

みたいな事が出来るんだけど、一般的なCOMオブジェクトはWSHからはこういう書き方は出来ない。

WScript.ConnectObject()しないとダメ。

このカラクリって、COMオブジェクト側で

  • handlerを持っておくアクセサ
  • handlerを呼び出すイベント関数

がどうも同名で定義されてるように思える。(OLE Viewer見る限りは)

参考リンクのjscriptで自作COMからイベントを発生させたいの話の流れを読む限りは、同名じゃないけどJScriptから渡されたFunctionオブジェクトとそれを呼び出すイベント関数の両方が定義されてるのが分かる。

ゲスト



トラックバック - http://moz-addon.g.hatena.ne.jp/ZIGOROu/20071128