ホーム > 読んだ

tatsuya
スクリプト言語で手軽にプログラミング
Perl から Win32 を使う

ガイド

書誌

authortatsuya
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(