tatsuya
スクリプト言語で手軽にプログラミング
Perl から Win32 を使う
ガイド
書誌
author | tatsuya |
publisher | ソフトバンク |
year | 『C Magazine 2004.8』p.59-64 |
履歴
editor | 唯野 |
2004.11.7 | 読了 |
2004.11.11 | 公開 |
2005.1.4 | 修正 |
2012.1.17 | タグ追加 |
2020.2.25 | 文字化け修正 |
ActivePerl が 5.6 でサポートした Win32 系モジュールを用いた Perl スクリプトにおける Win32 API の使用、OLE 経由による Word/Excel へのアクセスについてを扱った記事。個人的に Excel ファイルへの Perl からのアクセスについては、以前 Spreadsheet::WriteExcel、Spreadsheet::ParseExcel を試みて失敗した経験があったため(参考文献にある IBM のドキュメントによると、これは IO::Scalar の利用できないのが原因とある)、それきりとなってしまっていたが、今回、Win32::OLE を利用することによりこれができたので取り上げる。
但し、私が Win32::OLE から Excel へアクセスするプログラムを書いてみたところ、Perl スクリプトからだと問題ないのに CGI からこれを呼び出すと失敗するケースがあった。きちんとした原因まで把握できていないのだが、少なくともオープンする Excel ファイルのパスは / ではなく \ で区切らないとアプリケーション・オブジェクトの取得に失敗するようである。(環境は Windows2000 SP4、Apache for Win32 2.0.52、ActivePerl 5.8.4 build 810。)
抄録
60-61
Perl から Win32 API を利用するためには PPM で以下のように追加モジュールのインストールが必要。これらは ActiveState にドキュメントがある。
> ppm ・・・ PPM> install Win32-API ・・・ PPM> exit
61
Win32 でシステム情報を取得するプログラムのサンプル。コードを見ると分かるように手順は、必要なモジュールのインポート -> 必要とする API の取得 -> 受取値の器の定義 -> API の呼び出しと結果の器への代入――となる。
# メモリ情報の取得 use strict; use Win32::API; my $GlobalMemoryStatus = new Win32::API( "Kernel32", "GlobalMemoryStatus", ["P"], "V") || die; my $mem_sts = pack "L8", (0, 0, 0, 0, 0, 0, 0, 0); my %mem; my @mem_param = qw(