はじめまして、TMinorと申します。 Visual Studio 2008 Pro で開発をしており、 プログラムを始めて2年目になります。 完成したプログラムを普通にエクスプローラを開いて実行するとうまくいくのですが、 スタートメニューから実行すると 何故かカレントディレクトリが「C:\Documents and Settings\ユーザー名」の 位置になってしまい、素材を読み込めなくなってしまいます。 これは恐らくDXライブラリの仕様ではないと思いますが、 素材が読み込めないのでは配布するときに困ってしまいます。 このような状況をなんとか打破したいのですが、 対処法などがお分かりの方がおりましたら是非ご教授願います。
int WINAPI WinMain(){ の次ぐらいに char Path[MAX_PATH]; // EXEのあるフォルダのパスを取得 ::GetModuleFileName( NULL, Path, MAX_PATH ); char *p = ::strrchr( Path, '\\' ); // 引数2が最後に見つかった場所 *p = '\0'; // カレントディレクトリの設定 ::SetCurrentDirectory( Path ); と言うのは?
直りました。 私も最初はプログラム直下にカレントディレクトリを設定するように頑張ったのですができませんでした。 GetModuleFileName関数で第一引数をNULLに設定すると プログラムのパスを取得できるんですね。 meiginさん。 ご教授ありがとうございます。 本当に助かりました。
そんなに大きな問題になることはないと思いますが、ユーザーがファイル名を変更してしまう例も考慮して、 PathRemoveFileSpec()関数を使ったほうがより安全だと思います。 「ソ」とか「表」とかの文字が入っていたら、バグになりますから、ファイル名を取り除くのにはPathRemeveFileSpec()を使ったほうがいいかと思います。