VBScript/JScriptなどからCOM経由でGrowlするためのCOMコンポーネントをリリースしました

とりあえずGNTP/COMと呼んでます。

http://github.com/snaka/GNTPCom

中身は、mattnさん作の gntp-send ライブラリを呼び出しているだけの単純なラッパーです。

インストール方法

  1. ここからzipファイルをダウンロード
  2. ダウンロードしたzipファイルを展開
  3. install.bat を実行して COM コンポーネントレジストリへ登録

VBScriptから使ってみる

以下のようなコードで呼び出せます。

set g = CreateObject("GNTPCom.Growler")
g.Init "Sample", Array("notify", "warn", "error")
g.Notify "notify", "Greeting", "Hello, from VBScript!"
set g = Nothing

JScriptから使ってみる

配列の扱いがVBScriptと違っているため、ちょっと工夫が必要です。

var g = new ActiveXObject("GNTPCom.Growler");

g.Init("JScript sample", SA("notify", "warn"));
g.Notify("notify", "Greeting", "Hello, from VBScript!");

// Utility for create SAFEARRAY object
function SA() {
  var temp = new ActiveXObject("Scripting.Dictionary");
  for (var i = 0; i < arguments.length; i++)
    temp.add(i, arguments[i]);
  return temp.Items();
}

参考となった書籍/サイトなど

C++でプログラムするのがほとんど初めてだったので、いろいろ苦労した。
以下、参考となった書籍およびサイトについて。

Amazon.co.jp: C++プログラミング入門: グレゴリー サティア, ダウグ ブラウン, Gregory Satir, Doug Brown, 望月 康司, 谷口 功: 本
まずはC++の基本ということで読んだ本。Cはある程度知っているけどC++はぜんぜんっていうレベルだった自分にとって、ちょうどいいくらいの内容でした。
Amazon.co.jp: ATL COMプログラミング—ATLとVisualC++で作る高性能COMコンポーネント (Programmer’s SELECTION): リチャード グリムス, ジョージ ライリー, アレックス ストックトン, ジュリアン テンプルマン, Richard Grimes, George Reilly, Alex Stockton, Julian Templeman, 田中 正造: 本
翻訳のせいなのか自分の理解が浅いせいなのか内容を理解するのに苦労しましたが、とりあえず5章までざっと読み進めつつサンプルコードを動かしてみる事で、VC++/ATLでのCOMのつくり方がおぼろげながら理解できました。
David Wang : HOWTO: Convert between JScript Array and VB Safe Array
JScriptでの配列の扱いに困っているところで、はてダのコメント欄で教えてもらったサイトです。JScriptの配列をScripting.Dictionaryオブジェクトを使ってSAFEARRAYに変換する方法が載ってます。