Re: GetModuleFileNameAとDrawString ( No.1 ) |
- 名前:管理人 日時:2020/03/06 03:49
載せていただいたプログラムを使って以下のようなプログラムを組んで
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int x, add ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
char CurrentDir[256];
GetModuleFileName(NULL, CurrentDir, sizeof(CurrentDir) / sizeof(CurrentDir[0]));
DrawString(0, 0,CurrentDir, GetColor( 255,255,255 ));
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
作成したプログラムを『D:\テストフォルダ』というフォルダの中で実行してみたのですが、画面には
D:\テストフォルダ\Test.exe
と、正常にフォルダ名で途切れず表示されました
itohiiさんはどのような日本語名のフォルダで試されたのでしょうか?
|
Re: GetModuleFileNameAとDrawString ( No.2 ) |
- 名前:itohii 日時:2020/03/06 10:41
返信ありがとうございます。
自分は例えば
C:\Users\itohi\Desktop\だ\Test.exe
で実行したいところ
C:\Users\itohi\Desktop\
と表示されてしまいます。
以前友人に試しに動かしてもらったところ、
ユーザ名(↑だったらitohiにあたるところ)が日本語にしているらしく
C:\User\○○(ユーザ名)\Game\Test.exe
としたい所、
C:\User\
と表示されていることが発覚しました。
|
Re: GetModuleFileNameAとDrawString ( No.3 ) |
- 名前:みけ 日時:2020/03/06 17:51
GetModuleFileNameの動作がどうなっているか判らないので
GetModuleFileName直後のCurrentDirメモリー内容を記載すれば管理人様が解決しやすいかも。
あと、下記の場合はどうかしら?
printfDx("\n\n%s\n", __argv[0]);
|
Re: GetModuleFileNameAとDrawString ( No.4 ) |
- 名前:管理人 日時:2020/03/06 22:15
|
Re: GetModuleFileNameAとDrawString ( No.5 ) |
- 名前:itohii 日時:2020/03/07 00:58
ご返信ありがとうございます。
Ver 3.21 です。
申し訳ないのですが、最新バージョンを入れてリビルドしても同様に表示できませんでした…。
|
Re: GetModuleFileNameAとDrawString ( No.6 ) |
- 名前:管理人 日時:2020/03/08 01:36
お試しいただきありがとうございます
最新版でも駄目でしたか…うーん、不思議ですね…
ふと気になったのですが、
C:\User\○○(ユーザ名)\Game\Test.exe
の場合正常に描画されないとのことですが、
DrawString( 0, 0, "C:\User\○○(ユーザ名)\Game\Test.exe", GetColor( 255,255,255 ) );
と、GetModuleFileName で取得できる文字列を直接プログラム中に記述して
DrawString を実行した場合も『C:\User\』しか描画されないのでしょうか?
あと、手元で No.1 の書き込みのプログラムをビルドした実行ファイルをこちらに
アップしましたので、よろしければこちらの実行ファイルでも同様の日本語文字が
表示されない結果になってしまうかお試しになってみてください m(_ _;m
https://dxlib.xsrv.jp/temp/GetModuleFileNameTest.zip
|
Re: GetModuleFileNameAとDrawString ( No.7 ) |
- 名前:itohii 日時:2020/03/09 00:50
ご返事ありがとうございます。
DrawString( 0, 0, "C:\User\○○(ユーザ名)\Game\Test.exe", GetColor( 255,255,255 ) );
直接の描画もダメでした。
管理人様のexeうまくいきました!
同じく「だ」のフォルダに入れてみたら表示できました!
環境や設定が間違っているのでしょうか…?
|
Re: GetModuleFileNameAとDrawString ( No.8 ) |
- 名前:管理人 日時:2020/03/09 05:08
お試しいただきありがとうございます
直接でも駄目でしたか…
ただ、exeでは正常に表示されたとのことで、何よりです
そういえば、もしかしたら重要なことをお聞きし忘れていたかもしれないのですが、
お使いの開発環境は何でしょうか?( VisualStudio2019 や BorlandC++ Compiler など )
|
Re: GetModuleFileNameAとDrawStr ( No.9 ) |
- 名前:itohii 日時:2020/03/09 13:06
VisualStudio 2017 communityです。
|
Re: GetModuleFileNameAとDrawString ( No.10 ) |
- 名前:管理人 日時:2020/03/11 00:23
ご返答ありがとうございます
VisualStudio 2017 Community でしたら私と同じ環境ですね…
うーん、謎です…
大変お手数で申し訳ないのですが、プロジェクトの設定などが関係しているかもしれませんので
直接
DrawString( 0, 0, "C:\User\○○(ユーザ名)\Game\Test.exe", GetColor( 255,255,255 ) );
を呼んでいる『文字列が途中で途切れて正常に描画されない』状態のプログラムを、
プロジェクトのフォルダごとzipファイルに圧縮してギガファイル便などのアップローダーに
アップしていただけないでしょうか?
プログラム以外に何か原因が無いか調べてみたいと思います m(_ _;m
|
Re: GetModuleFileNameAとDrawString ( No.11 ) |
- 名前:itohii 日時:2020/03/12 00:00
https://14.gigafile.nu/0510-ddca8ff351ca9fbe33c6312abbd7e8e43
こちらになります。
よろしくお願いします。
対応まことにありがとうございます…。
|
Re: GetModuleFileNameAとDrawString ( No.12 ) |
- 名前:はるかぜ 日時:2020/03/12 09:19
//文字コード設定
SetUseCharCodeFormat(DX_CHARCODEFORMAT_UTF8);
これが書かれていることが原因ですね。
この行を削除すれば正常に動作します。
どうしてもDX_CHARCODEFORMAT_UTF8を使用したいのであればこの掲示板のワード検索で
SetUseCharCodeFormat
で検索すると役に立ちそうな情報がでてきます。
|
Re: GetModuleFileNameAとDrawString ( No.13 ) |
- 名前:itohii 日時:2020/03/12 10:13
……治りました……。
ほんとバカバカしい原因で申し訳ありません……。
何日も対応ありがとうございました…。
|
Re: GetModuleFileNameAとDrawString ( No.14 ) |
- 名前:管理人 日時:2020/03/13 03:19
原因が分かったようで何よりです
GetModuleFileName などで得られる文字列や、VisualStudio の通常の文字列リテラルは
シフトJIS形式なので、SetUseCharCodeFormat(DX_CHARCODEFORMAT_SHIFTJIS); を実行している
状態と同じになります
紛らわしいことに多くの文字コード形式で英数字記号などの半角文字は文字コードが一致しているので
扱う文字コードと、SetUseCharCodeFormat で設定する文字コード形式が不一致でも英数字記号だけは
正常に表示されてしまい、全角文字だけ正常に表示されない、という状態になります…
( 半角英数字も文字コード形式毎に全く異なれば、1文字目から表示されなかったり文字化けしたりして
直ぐに文字コードが違っていると気付けるのですが… )
私ももっと早く気付くべきでした…
> はるかぜさん
対応が遅い私の代わりにご返答いただきありがとうございます m(・・;m
|