トップページ > 記事閲覧
DrawKeyInputStringの挙動
名前:8127 日時: 2018/04/27 22:30

お世話になっております。 今回は不具合の詳細が自分でもよく分かってないので長文になってしまいます・・・ 環境はmsvc2017、dxlib共に最新です。 ・起こっている問題(これを問題Aとする) DrawKeyInputStringで入力中の全角文字(と変換候補)が全く表示されない 例えば、"aaa[全角切替]あああ"と入力すると、aaaしか表示されず、[enter]を押して確定するとちゃんと"aaaあああ"と表示される 要するに、黄色の背景色が絡んで表示される部分が全く表示されません。 ところが、環境によって再現したりしなかったりしてすごく困っています。 サンプルコード(末尾に添付)の実行結果なのですが、 ・新規プロジェクトを作ってサンプルコードを実行した場合(32bit,マルチバイト文字):正常に動作する ・既存プロジェクトのint WINAPI WinMain() 直後にサンプルコードを埋め込んだ場合(32bit,マルチバイト文字):問題Aが発生する となっていて、再現コードに落とそうとした時点でつまづいてしまいました。 私の考えとしては、 (i)int WINAPI WinMain()よりも前に実行されるもの(グローバル変数のコンストラクタとか)が悪さをしている (ii)コンパイルオプションの違いで再現しない(少なくとも32bit,マルチバイト文字は共通している) のどちらかだと思いますがよく分かりません・・・ 情報が限られていて解決が非常に難しいと思いますが、なにか心当たりはありませんでしょうか? よろしくお願いします。 サンプルコード:(HPで配布しているものとほぼ同じ) #include "DxLib.h" void init() { ChangeWindowMode(true); //ウインドウモードにする SetWindowSize(640, 480); if (DxLib_Init() == -1) // DXライブラリ初期化処理 { return; // エラーが起きたら直ちに終了 } SetDrawScreen(DX_SCREEN_BACK); //描画先を裏画面に設定 } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { init(); char String[256]; int InputHandle; // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし) InputHandle = MakeKeyInput(255, FALSE, FALSE, FALSE); // 作成したキー入力ハンドルをアクティブにする SetActiveKeyInput(InputHandle); // キー入力終了待ちループ // (ProcessMessageをループごとに行う) while (!ProcessMessage()) { // 入力が終了している場合は終了 if (CheckKeyInput(InputHandle) != 0) break; // 画面の初期化 ClearDrawScreen(); // 入力モードを描画 DrawKeyInputModeString(640, 480); // 入力途中の文字列を描画 DrawKeyInputString(0, 0, InputHandle); // 裏画面の内容を表画面に反映させる ScreenFlip(); } // 入力された文字列を取得 GetKeyInputString(String, InputHandle); // 用済みのインプットハンドルを削除する DeleteKeyInput(InputHandle); // 画面の初期化 ClearDrawScreen(); // 入力された文字列を画面に表示する DrawString(0, 0, "あなたが入力した文字列は", GetColor(255, 255, 255)); DrawString(0, 16, String, GetColor(255, 255, 255)); // 裏画面の内容を表画面に反映させる ScreenFlip(); // キー入力待ち WaitKey(); // DXライブラリの使用終了 DxLib_End(); // 終了 return 0; }
メンテ

Page: 1 |

Re: DrawKeyInputStringの挙動 ( No.1 )
名前:8127 日時:2018/04/27 22:53

補足します。 ・新規プロジェクトと既存プロジェクトは同じPCでコンパイル/実行しているので環境の違いではないです。 ・問題Aが発生する場合はDrawKeyInputModeStringの"全角ひらがな"も描画されません。
メンテ
Re: DrawKeyInputStringの挙動 ( No.2 )
名前:8127 日時:2018/04/28 01:15

さらに補足します。 ・この問題を後回しにしていて原因解明が今になっただけで、この問題が最近急に起きはじめたわけではありません。 (6か月は前から起こっていた気がするので、最近の更新が問題になっている可能性は薄いです) ・windows7 64bitです。
メンテ
Re: DrawKeyInputStringの挙動 ( No.3 )
名前:管理人 日時:2018/04/28 21:12

同じ環境と同じプログラムなのに、プロジェクトが異なるだけで正常に動作しないのですか・・・ 使用されている VisualStudio2017 は頻繁にバージョンアップが行われていますので もしかしたらプロジェクトの設定が関係しているかもしれません こちらのスレッドで <IntelliSenseのエンジンが適切に機能しない> https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4390 gdropさんが『ソリューションの再ターゲット』という方法をご紹介されています もしかしたら上記スレッドで発生している問題と同じ原因かもしれませんので、よろしければ不具合が発生している 『既存プロジェクト』でこちらの『ソリューションの再ターゲット』という方法を試してみていただけないでしょうか? m(_ _)m
メンテ
Re: DrawKeyInputStringの挙動 ( No.4 )
名前:8127 日時:2018/04/28 21:53

ご返信ありがとうございます。 ソリューションの再ターゲットを試しましたが改善ありません・・・ 症状が起きるときの画面はこのような感じです。 ttps://i.imgur.com/1UP2BBL.png "aaaあああ"と入力しているがaaaしか表示されません。 (あああと入力している証拠として、右下に予測候補のサジェストが出ています。) enterで決定するとちゃんとaaaあああと表示されます。
メンテ
Re: DrawKeyInputStringの挙動 ( No.5 )
名前:管理人 日時:2018/04/30 01:33

ソリューションの再ターゲットではダメでしたか・・・ そうなりますと・・・ ・・・すみません原因になりそうな点が思いつきません・・・ 直接現象を確認できれば原因がわかるかもしれませんので、よろしければ 問題が発生する『既存プロジェクト』をメールでこちら BQE00322(あっとまーく)nifty.com ( (あっとまーく) を @ に置き換えてください ) に送っていただけないでしょうか? m(_ _;m
メンテ
Re: DrawKeyInputStringの挙動 ( No.6 )
名前:8127 日時:2018/04/30 17:23

質問なのですが、『既存プロジェクト』はboostをはじめかなりいろいろなものに依存する大規模なもの(70000行くらい)なのですが、 それらもすべてお送りする(=そちらでビルドが成功する状態にする)必要があるのでしょうか?
メンテ
Re: DrawKeyInputStringの挙動 ( No.7 )
名前:管理人 日時:2018/05/01 00:17

お手数をおかけしてすみません 必要なプログラムがスレッドの最初に載せていただいた数十行だけでしたら 不具合の再現に必要のない70000行のプログラムは含めていただかなくても大丈夫です m(_ _)m もし70000行のプログラムをプロジェクトから外すと不具合が発生しなくなってしまうとのことでしたら、 申し訳ありませんが70000行のプログラムも含めた状態のプロジェクトを送ってください m(_ _;m
メンテ
Re: DrawKeyInputStringの挙動 ( No.8 )
名前:8127 日時:2018/05/01 02:39

そちらこそご対応ありがとうございます。 現在、 既存プロジェクトを複製する -> WinMain直後にコードを埋め込む -> 不具合が再現することの確認 -> main.cpp以外を全削除する -> なぜか不具合が再現しなくなる・・・ といった状況なので、もう少しお待ちください。 (i)int WINAPI WinMain()よりも前に実行されるもの(グローバル変数のコンストラクタとか)が悪さをしている (ii)コンパイルオプションの違いで再現しない のうちの(ii)の可能性は消えたので(i)を中心に調査します。 恐らくどこかで未定義動作を踏んでいるのだと思われます(Dxライブラリには非がない気がします・・・すみません)
メンテ
Re: DrawKeyInputStringの挙動 ( No.9 )
名前:8127(解決) 日時:2018/05/01 17:16

管理人様、 調査したところ、別のライブラリとの干渉が問題のようでした。 DrawKeyInputString等は全く関係ないようですので近々別スレを立てさせていただきます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存