perlでGUIで実行ファイル
を引き続き試しているのですが、コンパイル時に
>pp -a hoge.gld -o hoge.exe hoge.pl
の様にコンパイルしても、ソース内のコマンドラインのデバッグメッセージが表示できない・・・
かくなる上は、GUIのメッセージボックスを使ってデバッグするかぁ。
なんでかな?
コマンドラインから実行した場合は動作するのに、コンパイルすると途中で落ちている感じなので、ファイルの読み込みのところだと思うのですが、どうなんでしょう?
調べている最中に見つけた、参考になりそうなところをリンクしておきましょう。
PAR: 今日のさえずり: SONAR が駆逐してくれるので泣ける | nDiki
手軽にメッセージボックスを使っていきましょう。
http://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq9j.html
Win32::MsgBoxを使うと、手っ取り早くWindowsのメッセージボックスを表示することができます。以下はそのサンプルです。: use Win32; MsgBox("Test", "This is a test", 48); # !マークと'OK'ボタンを持ったメッセージボックスを表示する sub MsgBox { my ($caption, $message, $icon_buttons) = @_; my @return = qw/- Ok Cancel Abort Retry Ignore Yes No/; my $result = Win32::MsgBox($message, $icon_buttons, $caption); return $return[$result]; }
むぅ〜 ”いやな日記”さんのLancher.exeもmain()にすらたどり着けることが出来ていない模様。何でだろう?しばし外っておいて、PARがバージョンアップするのを待つか?
それともコンパイル時のオプション設定に問題があるのか?
ActivePerlのバージョンとPARのバージョンの相性?
一応コマンドラインからPARで実行形式を作れるのですが、ワンライナーをコンパイルする場合
>pp -o hoge.exe -e "print \"Hello,hogehoge\""
の様にスクリプト部分をダブルクォーテーションで囲まなければなりません。これはLinuxなどの環境と違う点です。
Devel/Perl/Win32-GUI - cubic9.comこの方のプログラムは5.8.4で動作しているようです。
時代遅れの逆刃
開発環境は
AcrivePerl PAR
自分 5.8.7 0.90
いやな日記さん 5.8.4 0.85
ちなみに”101号室より愛をこめて”さんはPAR0.90でGUIのアプリの実行にやはり失敗している模様。
いい加減むかついてきたので、MsgBoxだけを出力するサンプルを書いたが、これもコンパイルすると動かない。”101号室”さんと同じ現象。
linuxのstraceコマンドのような物が無いため、どこでこけているのかさっぱり解らない。コンパイル時にguiオプションを外してもコマンドラインにメッセージを出力できないし・・・
http://www.microsoft.com/japan/whdc/devtools/debugging/installx86.mspx
ちきしょう。debugging toolなるものを落としてどうなっているのか見てやる。
って見てみたのですが、動作するプログラムと落ちてしまうプログラムの違いが見当たらない。というか使い方が良く解らん。通過したAPIをトレースしてくれるわけじゃないの?
ん〜
でもって、あきらめかけていたら上記したこちらのサイトにPARとPerlのバージョンを一致させる事。みたいな事が書いてあったので、5.8.7のマルチスレッド用をダウンロードして、インストールせずに、scriptフォルダでコンパイルしたところ、MsgBoxを表示させるプログラムは見事動作。
pp.batに違いは無いのに、どこが違うのでしょうね?
ちなみに実行形式は、PPMでインストールしたPAR0.90以下不明でコンパイルしたものより若干大きくなっていました。
”いやな日記”さんのlancherや、自作のスクリプトも見事動作。インストール作業に掛りましょう。多分、上書きインストールみたいな感じでよいのでしょうね。
とりあえず手順は
- ここからPARをダウンロードします。自分のActivePerlと同じバージョン(c:\perl -v で調べましょう)のPAR-***(PARのバージョン)-MSWin32-x86-multi-thread-***(perlのバージョン).parをダウンロードします。
- 拡張子をzipに変更して解凍します。
- 解凍して出来たファイルをc:\perl\PAR\ にコピーします。
- 環境変数のPATHに上記ディレクトリを追加し、新規環境変数でperl5libにc:\perl\PAR\lib\ を追加するそうです。
- 一度ログオフしてからログインして環境変数を有効にします。
- これでpp --gui -a hoge.gld -o hoge.exe hoge.pl で幸せになる準備が整ったことでしょう。今からログインしなおして様子を見てみます。
無事、コンパイルに成功しました。一応c:\prl\PAR\へのパスの設定はc:\perl\bin\より前に設定しておくと安心かもしれません。
自分はそうしました。
ふぅ。一安心。
さ〜て、次はVBで同じようなランチャーソフトでも書いてみるかな。