by Hippo2000(2001/2/20)
Jan Duboisさんにはメールで了解をいただきました。
内容等が間違っていたら修正します。ご連絡ください。
Win32::OLE::Const - TypeLibから定数定義を取り出す
use Win32::OLE::Const 'Microsoft Excel';
printf "xlMarkerStyleDot = %d\n", xlMarkerStyleDot;
my $wd = Win32::OLE::Const->Load("Microsoft Word 8\\.0 Object Library");
foreach my $key (keys %$wd) {
printf "$key = %s\n", $wd->{$key};
}
このモジュールはすべての定数を登録されたOLEタイプ・ライブラリからPerlプログラムで利用できるようにします。定数定義は関数としてインポートされ、コンパイル時の名前チェックが提供されます。多くの知らない関数を定義することを避けて、代わりとして定数をハッシュ・リファレンスとして返すこともできます。
use Win32::OLE::Const (TYPELIB,MAJOR,MINOR,LANGUAGE);
TYPELIB引数はタイプ・ライブラリをレジストリで探すための正規表現を指定します。この引数は暗黙のうちに、マッチングのスピードをほとんどの場合あげるように、頭に^がつけられることに注意してください。記述のどこであってもマッチするようにするには、".*Excel"のようなtypelib名を使ってください。TYPELIBだけが必須の引数です。
MAJOR と MINOR 引数はタイプ仕様の必要とされるバージョンを指定します。MAJOR引数が使われると、厳密にこのメジャー・バージョン番号をもったtypelibだけがマッチします。しかしMINOR引数は最小の受け入れることのできるマイナー・バージョンを指定します。MAJORが未定義であれば、MINORは無視されます。
LANGUAGE 引数が使われると、厳密にこのlanguage idを持っているtypelibだけがマッチします。
モジュールはtypelibを要求を満たす最も高いバージョン番号のtypelibを選択します。language idが指定されなければ、デフォルトのlanguage(0)が他のものよりも優先されます。
正しいPerl変数名つまり名前が以下の正規表現にマッチする:/^[a-zA-Z_][a-zA-Z0-9_]*$/
を持つ定数だけがエクスポートされることに注意してください。
my $const = Win32::OLE::Const->Load(TYPELIB,MAJOR,MINOR,LANGUAGE);
パラメータはuseの場合と同じです。
このメソッドは一般的にtypelibが英語以外の言語を使っているときや定数名にロケール特有のPerl変数名として許されない文字がはいっているときに好まれます。
もう1つの利点は、利用できるすべての定数を列挙することができることです。
loadメソッドはOLEオブジェクトもパラメータとして受け入れます。この場合、OLEオブジェクトは、それが持っているtypeライブラリを問い合わせられ、レジストリ検索はおこなわれなせん。面白いことに、これはより遅いようです。
最初の例では、すべてのExcel定数名をメインの名前空間にインポートし、xlMarkerStyleDot(-4118)の値を出力します。
use Win32::OLE::Const ('Microsoft Excel 8.0 Object Library');
print "xlMarkerStyleDot = %d\n", xlMarkerStyleDot;
2番目の例はすべてのWord定数をハッシュ・リファレンスとして返します:
use Win32::OLE::Const;
my $wd = Win32::OLE::Const->Load("Microsoft Word 8.0 Object Library");
foreach my $key (keys %$wd) {
printf "$key = %s\n", $wd->{$key};
}
printf "wdGreen = %s\n", $wd->{wdGreen};
最後の例はOLEオブジェクトをタイプライブラリを指定するために使います:
use Win32::OLE;
use Win32::OLE::Const;
my $Excel = Win32::OLE->new('Excel.Application', 'Quit');
my $xl = Win32::OLE::Const->Load($Excel);
このモジュールはWin32::OLEディストリビューションの一部です。
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。