dポイントプレゼントキャンペーン実施中!

実行ファイルが以下のようなディレクトリに
置かれています。

\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で作っています。

A 回答 (2件)

# 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に戻る場合 変更したカレントフォルダーを元に戻す処理が必要になる場合があるでしょう
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/03 23:16

作業ディレクトリによって異なると思います。


この作業ディレクトリは環境やそのプログラムを作成した言語などに
よっても違ってくるかもしれません。
大抵は作業ディレクトリはカレントディレクトリになるので特定の
プログラムから別のプログラムを実行すると実行元のプログラムの
作業ディレクトリがそのまま継承されるはずです。

ショートカットやバッチなどを使って作業ディレクトリを指定したり
なんて方法を使用したらどうでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/03 23:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!