• ベストアンサー

相対アドレスについて

実行ファイルが以下のようなディレクトリに 置かれています。 \hoge ├a.exe ├\aaaa │ ├b.exe │ └\bbbb └\bbbb a.exeの中でb.exeを呼び出します。 b.exeの中で相対アドレスでbbbbを指定したところ hoge直下のbbbbを指定したように動作します。(aaaa直下のbbbbではなく!) どこかの中から呼び出されたexeの指定する相対アドレスは はじめに起動したexeからの相対アドレスになるのでしょうか? それともこれは環境によるのでしょうか? a.exeはhspで、b.exeはcで作っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

# HSPは明るくないので … 実行時のカレントフォルダーを \hoge\aaaaに移動してから b.exeを実行すれば b.exeで .\bbbbを参照した場合に \hoge\aaaa\bbbbを参照するものと考えます b.exe側で WinAPIのGetModuleFilenameをつかってどこから読み込まれたのかを検出し、GetCurrentDirectoryで取得できるフォルダー名との差異を検証しましょう char chPath[MAX_PATH+1]; char chCurDir[MAX_PATH+1]; ::GetModuleFilename( NULL, chPath, MAX_PATH ); ::GetCurrentDirectory( MAX_PATH , chCurDir ); char *p = strrchr( chPath, '\\'); if ( *p != NULL ) {   *p = '\0'; } if ( strcmp( chPath, chCurDir) != 0 ) {   ::SetCurrentDirectory( chPath ); } といった具合のコードをスタートアップルーチンに仕込んで見ましょう a.exeに戻る場合 変更したカレントフォルダーを元に戻す処理が必要になる場合があるでしょう

upanepa
質問者

お礼

このようなAPIがあることを知りませんでした。 試してみようと思います。

その他の回答 (1)

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

作業ディレクトリによって異なると思います。 この作業ディレクトリは環境やそのプログラムを作成した言語などに よっても違ってくるかもしれません。 大抵は作業ディレクトリはカレントディレクトリになるので特定の プログラムから別のプログラムを実行すると実行元のプログラムの 作業ディレクトリがそのまま継承されるはずです。 ショートカットやバッチなどを使って作業ディレクトリを指定したり なんて方法を使用したらどうでしょうか。

upanepa
質問者

お礼

ご回答ありがとうございます。

関連するQ&A