2018年01月30日

シンボルってなに?by中学1年生

中学の頃、C言語でプログラミングをしていて困ったのが、専門用語の類。
中学生が用いる英和辞書では、分からないことだらけ。

コンパイルエラーのメッセージを見ていて困ったのが、「シンボル」(symbol)という用語でした。
一体何を示しているのか?
分からないので、結局、エラーメッセージなんて当てにせず、該当行の周辺をずーっと眺めて、間違いを見付けていました。
まぁ、それが楽しかったんで、C言語やっていたんですが。

結局のところ「シンボル」って、変数名とか、関数名とか、名前を付けられ識別される「モノ」を一般的に指して呼ぶときの言い方なんですよね。「識別子」とでも訳すべきでしょうか。種別を識別する前の段階……コンパイルするときの文字の並びを1つの単位で見たときのまとまり。まぁ、中学1年生に「識別子」と言って通じたかどうかは分かりませんが…。

シンボルがどうとかでエラーが発生しているときは、エラーの発生行そのものよりは、その変数を宣言している行とか、関数を定義している行とかだったりを見なければ、本当の間違いは見つからないわけで。そりゃ、真の原因を見付けるのも苦労しました。
当時は、呼び出し先や定義行にジャンプするエディタなんか使っていなかったから、そういうのを探すのも苦労したっけなぁ。


posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング

2018年01月25日

コマンドプロンプトからGUIのプログラムを実行し待機したいときに

昨日ちょこっとだけ書いた、ステータスバー監視のプログラムを書こうと思ったら、監視しようとしていたのはステータスバーではなくで独自描画されたグラフィック領域で残念…の話の続き。

結局、監視するのではなく、そのソフトは処理終了後にプロセスを自動終了させるオプションを持っているので、プロセスの動作状態を監視しておけば良い、ということになりました。

つまり、子プロセスとしてそのソフトを起動(CreateProcess)し、WaitForSingleObject() API等で待機すれば良いということですね。

さて、ソフトの位置やオプションは引数で与えるとして、どうやってCreateProcess() に渡そうか。
コマンドプロンプトのプログラムなので、引数はarvc/argv で受け取ることになります。
これをCreateProcess() APIに渡すための引数にするのは、ちょっと面倒。
小間切れに分かれた文字列(argv[])を1つの文字列に再構成し、さらに、スペースが含まれる場合はダブルコーテーションで囲まなければなりません。メッチャ面倒。

GetCommandLine() APIを使おうかとも思いましたが、これは自身のプログラムファイル名も含んでしまうので、除去が面倒。

となると、C言語らしく、_spawnvp()関数に_P_WAIT付けて実行してしまえばよいんじゃないかと。

waitfor_program.png

すると、どうやらうまくいきました!

waitfor_program2.png

試しに、引数にNotepad.exeを与えてみると、メモ帳が起動し、親プログラムは待機。メモ帳を終了させると、親プログラムは終了。WaitForSingleObject() APIも書かずに、上手くいきました! やってみるもんだな。

…と、これをTwitter上で書いたところ、「start /wait」コマンドを使えば良いのではないかとツッコミが…!

し、知らなかった…。
そんな便利なオプションがstartコマンドに存在していたとは…。

無知は罪ですね。

posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング

2017年11月27日

Windowsストアアプリとタスク マネージャーとリストビュー

一昨日、ListView to CSVをアップデートした際の更新項目のうち「本ソフトを管理者権限で起動する必要があるケースとして、取得対象プログラムが管理者権限で動作している場合の他に、取得対象プログラムがWindowsストアアプリの場合もあったため」の部分については、ユーザーからの1件の問合せがきっかけでした。

Windows 10で「タスク マネージャー」を対象にListView to CSVを実行しようとしたとき、一覧に「タスク マネージャー」内のリストビューやツリービューが表示されないのです。

ただし「表示>設定」から「管理者権限で動作する」をONにしてやると、一覧に「タスク マネージャー」内のリストビューやツリービューが表示されるようになります。

lv2csvadmj.jpg

ストアアプリはWindowsによって、ウイルスなどの脅威から攻撃されないために特殊な保護管理下にあるため、管理者権限のアプリからでないと、中を覗くことができない仕様になっているのだと考えられます。


続きを読む
posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング