ページ 1 / 1
dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 10:58
by dic
おかげさまでdllが完成しました
が、ログファイルに現在にディレクトリを出力するようにしてるところで問題がありました
dllソース内で
コード:
char szLog[MAX_PATH];
char dir[MAX_PATH];
GetCurrentDirectory( MAX_PATH, dir );
wsprintf( szLog, "FileName: %s\\%s を ロードしました。\n", dir, filename );
sLogdraw.PutLog( szLog ); // ファイルに書き込む ここはチェック済み
ここでのGetCurrentDirectoryは、dllを作ったところのディレクトリが埋め込まれているのか
もしくは、このdllを利用しているexeのディレクトリを取得するのか ためしたところ
FileName: ・・\image\ブロック.bmp を ロードしました。
とディレクトリのところだけ文字化けしていました
dll内で、現在のディレクトリを取得するというのは無理なのでしょうか?
Re: dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 11:09
by softya(ソフト屋)
どうみてもワイド文字(UNICODE)とSJISのコードが混在してますので全部をワイド文字に統一してください。
コード:
WCHAR szLog[MAX_PATH];
WCHAR dir[MAX_PATH];
GetCurrentDirectory( MAX_PATH, dir );
wsprintf( szLog, L"FileName: %s\\%s を ロードしました。\n", dir, filename );
sLogdraw.PutLog( szLog ); // ファイルに書き込む ここはチェック済み
ここの中でfilename がワイド文字じゃなかった場合はファイル名が文字化けすると思います。
Re: dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 12:55
by dic
>>softyaさん
コード:
wsprintf( szLog, "FileName: %s\\%s を ロードしました。\n", dir, filename );
sprintf( szLog, "FileName: %s\\%s を ロードしました。\n", dir, filename );
ワイド文字は使わないので wsprintfを sprintfに変更してみたのですがやはりだめでした
filenameもcharです
Re: dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 13:17
by しひ
GetCurrentDirectoryA()を使うとか。
Re: dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 14:25
by softya(ソフト屋)
SJISで統一するなら、しひさんの言うとりGetCurrentDirectoryA()を使えば出来ます。
コード:
char szLog[MAX_PATH];
char dir[MAX_PATH];
GetCurrentDirectoryA( MAX_PATH, dir );
sprintf( szLog, "FileName: %s\\%s を ロードしました。\n", dir, filename );
sLogdraw.PutLog( szLog ); // ファイルに書き込む ここはチェック済み
sLogdraw.PutLogがSJIS対応している前提ですが。
Re: dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 17:00
by ISLe
wsprintfのwはwideじゃなくてwindowsのwです。
Win32 APIなので、wsprintfAを使えばCRTライブラリが不要になります。
コード:
char szLog[MAX_PATH];
char dir[MAX_PATH];
GetCurrentDirectoryA( MAX_PATH, dir );
wsprintfA( szLog, "FileName: %s\\%s を ロードしました。\n", dir, filename );
sLogdraw.PutLog( szLog ); // ファイルに書き込む ここはチェック済み
GetCurrentDirectoryAの戻り値を調べてみては?
カレントディレクトリ相対なら"."を基準にすれば良い気がしますけど。
(追記)ログ出力テキストでしたね。勘違い失礼しました。
Re: dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 17:17
by dic
開発環境はVC++6.0なのでデフォルトでUNICODEは定義されてないので
自動でGetCurrentDirectoryA になるのでここはいいと思います
でも
コード:
sLogdraw.PutLog( "DirectDrawログファイル:2011/03/22\n" );
を追加したんですが、反映されません
どこか別の問題かもしれないので慎重に調べます
Re: dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 17:18
by softya(ソフト屋)
あっ、dicさんすいません。
swprintfと混同したようです。
ISLeさん、ありがとうございます。
Re: dllでのGetCurrentDirectoryについて
Posted: 2011年3月22日(火) 17:36
by dic
コード:
winbase.h の途中
#ifdef UNICODE
#define GetCurrentDirectory GetCurrentDirectoryW
#else
#define GetCurrentDirectory GetCurrentDirectoryA
#endif // !UNICODE
winuser.hの途中
#ifdef UNICODE
#define wvsprintf wvsprintfW
#else
#define wvsprintf wvsprintfA
#endif // !UNICODE
とあるので、大丈夫でした
>>wsprintfのwはwideじゃなくてwindowsのwです。
>>Win32 APIなので、wsprintfAを使えばCRTライブラリが不要になります。
そうだったんですね
wideの略かと勘違いしました
現在作成しているdllの名前が dll.dll なので別の名前にしたらうえの追加したログも
GetCurrentDirectoryも期待どおりに動作しました
dllの名前で衝突していたと思います
解決しました ありがとうございました