SSブログ

MAGIC V10Beta評価(その2) [dbMAGIC]

 今日はちょっとV10の内部的なことを・・・。

 うちのアプリの共通プログラムの中で、コマンドラインを取得するプログラムがあります。これは、現在、使用されているMAGIC.INI等のファイル名を判定するために「GetCommandLine」というWin32のAPIを使用して取得しています。
 つまり戻り値が、

のように、「"C:\Program Files\Magic\eDeveloperPlus\MGgenw.exe" /ini=(パス名)\magic.ini /user=(ユーザ名)」のような形で返ってきます。この「/ini=」以降の文字列を取得することにより、それが可能となります。
 この共通プログラムを起動しているMAGICのパス名を判断するために使っている箇所があったんですね。ところが、実は、V10だと若干仕様が変わりまして、パス名が返ってきません。

 つまりV10では、「eDevRTE.exe /INI=(パス名)\Magic.ini /USER=(ユーザ名) /[INTERNALS]RteDebugMode=1 /[INTERNALS]AgentTlkPort=43996 /[INTERNALS]AgentRtPort=44433 /[INTERNALS]DeploymentMode=R」というように、指定した「/ini=」や「/user=」などのパラメータ以外の[INTERNAL]というセクションのパラメータが勝手に付くばかりでなく、実行形式の「eDevRTE.exe」(これは実行版のプログラム名で、開発版の実行名「eDevStudio.exe」とは異なるもの)はパス名が取れてしまいます。
 パス名を判断するために使用していた箇所は、当然ながら誤動作してしまう結果となりました。
 このことから何が分かるかと言うと、次のものです。

  1. 開発版から実行すると、プログラムは開発版ではなく実行版が起動される
  2. 開発版と実行版は、パラメータの受け渡しにより連動している(エージェントが存在している!?)
  3. 開発版と同じパスに実行版のモジュールが存在する仕様となっている
 実は、起動しているモジュールのパス名は、V10では専用の論理名が用意されていて、「%EngineDir%」や「%WorkingDir%」で取得が可能となっている模様です。
(Win32のAPIを使うなら、「GetModuleFileNameA」を使うのが正しいらしい。)

 ということで、今回は、環境周りの一例により、V10の新たな側面を見ることができた?という話でした。
 プログラムのエラーがあっても、実行版だけコケてくれるので、有り難い?し、実行させながら開発版でプログラムの中身を見ることもできる(読み込み専用となりますが...)ので、ちょっとばかり開発条件は変わってくるかもしれませんね。

 ちなみに、今回キャプチャした画面は、うちで作っているデバッガのV10移植版のものです。問題なく動いていることをお知らせしておきます。
 V10のデバッグ機能のほうは、まだ見てないですが、ブレークポイントを設定したり、変数も更新できたりと、良くなっているらしいので、「うちのデバッガは、もう出番が無い?」のかも知れませんが・・・。(^^;


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:仕事

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。