PerlでWindowsAPIをコールする
前回、『Perl で Win32::API プログラミング入門』リンクメモでのお約束(暇な時にソース解析)、とりあえず前半部だけソース解析をしてみました。
#!/usr/bin/perl use Win32::API; my $MessageBox = Win32::API->new("user32", "MessageBoxA", "NPPN", "N"); $MessageBox->Call(0, "Hello, World!\n", "Message", 0);http://d.hatena.ne.jp/TAKESAKO/20090324/1237879559
コンストラクタ(new)の引数は以下のようです。
- 第1引数は、DLL(user32.dll)のライブラリの名前を指定します。
- 第2引数は、WindowsAPIの名前を指定します。
ちなみに、"MessageBoxA"の最後の"A"ですが、ANSI版の「MessageBoxA」とUnicode版の「MessageBoxW」の2種類が存在します。文字列系のAPIには大体この2種類があります。 - 第3引数は、WindowsAPIの引数の属性を指定します。
"N"はvalue is a number (long)で、"P"はvalue is a pointer (to a string, structure, etc...)です。 - 第4引数は、WindowsAPIの戻り値の属性を指定します。
"N"は上記と同じで、戻り値が無い時は"V"になるようです。 - 参考リンク:他の属性に関しては以下のURLを参照のこと。
http://search.cpan.org/~cosimo/Win32-API/API.pm
Callメソッドの引数は以下のようです。
- 第1引数は、オーナーウィンドウ(親ウィンドウ)を指定します。
サンプルでは『0』が指定されていますが、これは、オーナーウィンドウを持たないという意味です。 - 第2引数は、メッセージボックスに表示するメインの文字列を指定します。
- 第3引数は、メッセージボックスのフレームに表示されるタイトルを指定します。
- 第4引数は、メッセージボックスの形態を表す定数を指定します。
形態を表す定数は沢山ありますが、サンプルでの『0』はMB_OKでデフォルトです。 - 参考リンク:他の形態を表す定数に関しては以下のURLを参照のこと。
http://wisdom.sakura.ne.jp/system/winapi/win32/win5.html
ちなみに、Callメソッドは、WindowsAPI(今回はMessageBoxA)に対応してるようです。
つまり、CallメソッドをコールすることでWindowsAPIが実行されます。