トップページ > 記事閲覧
DrawKeyInputStringのエラー
名前:Tir 日時: 2017/08/01 11:56

お世話になります。 MakeKeyInputで作った日本語入力可能なキー入力状態で半角で文字を打った後全角切り替えた後に文字を打つと DrawKeyInputStringでエラーが発生することがあります。因みにUnicode版です。
メンテ

Page: 1 |

Re: DrawKeyInputStringのエラー ( No.1 )
名前:管理人 日時:2017/08/02 00:56

ご指摘ありがとうございます ただ、以下のようなシンプルなプログラムをUnicode版で実行してみたのですが、 手元の環境では現象を再現することができませんでした #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 文字列入力ハンドルの作成 int KeyInputHandle = MakeKeyInput( 64, 0, 0, 0 ) ; // 作成したキー入力ハンドルをアクティブにする SetActiveKeyInput( KeyInputHandle ) ; // メインループ while( ProcessMessage() != -1 ) { // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 画面をクリア ClearDrawScreen() ; // 入力中の文字列を描画 DrawKeyInputString( 0, 0, KeyInputHandle ) ; // IMEの入力モードの描画 DrawKeyInputModeString( 640, 480 ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 試した手順は以下のようなものなのですが、Tirさんがエラーを確認された際の手順と合っていますでしょうか? 1.プログラムが起動したら「半角/全角」キーを押してIMEをONにする 2.「無変換」キーを押して半角カタカナの入力モードにする 3.半角のカタカナを何文字か入力する 4.エンターキーで半角カタカナの入力を確定 5.「無変換」キーを何回か押して全角ひらがなの入力モードにする 6.全角のひらがなを入力する 7.エンターキーで全角ひらがなの入力を確定
メンテ
Re: DrawKeyInputStringのエラー ( No.2 )
名前:Tir 日時:2017/08/02 11:30

申し訳ありません半角カタカナではなく半角英数です… また確実に発生する訳ではありませんし条件も確定ではありません。 上記のプログラムを試したところ 1.プログラムが起動したら「半角/全角」キーを押してIMEをONにする 2.適当にZキーなどのキーを押す これだけでエラーが発生しました。エラーの発生個所は違いましたが… ttp://i.imgur.com/dl1Hlio.jpg 恐らくですがDXライブラリの最新版でのみ発生するかもしれません。 最初既にあった以前のバージョンのサンプルテスト用のDXライブラリで上記のプログラムを試したところ正常に動作しました
メンテ
Re: DrawKeyInputStringのエラー ( No.3 )
名前:管理人 日時:2017/08/04 00:52

ご返答ありがとうございます DrawKeyInputModeString の中ですか… > 1.プログラムが起動したら「半角/全角」キーを押してIMEをONにする > 2.適当にZキーなどのキーを押す > これだけでエラーが発生しました。エラーの発生個所は違いましたが… 何度か試してみたのですが、やはりエラーは発生しませんでした > 恐らくですがDXライブラリの最新版でのみ発生するかもしれません。 最新版とは、正式公開されている最新バージョン( Ver3.18c )でしょうか? それともこちらの掲示板でちょくちょくアップしているテスト版( 暫定最新版 )でしょうか? > 最初既にあった以前のバージョンのサンプルテスト用のDXライブラリで上記のプログラムを試したところ正常に動作しました こちらは『DrawOval関数について』のスレッドで No.1 の書き込みのタイミングでアップされていたテスト版でしょうか? あと、こちらにDXライブラリのソース込みで No.1 のテストプログラムをビルド・実行する プロジェクトをアップしてみました https://dxlib.xsrv.jp/temp/DxLibSourceTest.exe ファイルは自己解凍形式となっていて、実行すると DxLibSourceTest という名前のプロジェクトフォルダが作成されます 大変お手数で申し訳ありませんが、もしよろしければフォルダの中にある DxLibSourceTestVS2017.sln を開いていただき デバッグ実行をして、件の手順でエラーが発生した際のDXライブラリのソースファイル名と行番号を教えて頂けないでしょうか? m(_ _;m
メンテ
Re: DrawKeyInputStringのエラー ( No.4 )
名前:Tir 日時:2017/08/04 01:40

バージョンは正式に公開されているVer3.18cです。 サンプルプログラム実行用のプロジェクトはどのバージョンかは覚えていませんが 『DirectX11の機能について』時点でのDXライブラリバージョン(確かVer3.18)のプロジェクトで実行したらエラー落ちすることはありませんでした そして上記のプロジェクトで実行したところDxInputString.cppの1474行目でエラーが発生しました。一応画像も載せておきます。 ttp://i.imgur.com/xCD3QLD.jpg
メンテ
Re: DrawKeyInputStringのエラー ( No.5 )
名前:管理人 日時:2017/08/06 04:20

ご返答&お試しいただきありがとうございます > 『DirectX11の機能について』時点でのDXライブラリバージョン(確かVer3.18)のプロジェクトで実行したらエラー落ちすることはありませんでした 「『DirectX11の機能について』時点でのDXライブラリバージョン」の数日後にIME関連の処理を変更したので、 その変更の中に本件の原因がありそうです > そして上記のプロジェクトで実行したところDxInputString.cppの1474行目でエラーが発生しました。一応画像も載せておきます。 > ttp://i.imgur.com/xCD3QLD.jpg ありがとうございます 止まっている箇所は『変換候補を表示する』処理なので、zを入力しただけでは普通に考えると変換候補は 表示されない筈なので、なぜここにきてしまっているのか謎です ただ、これまでは『変換候補が0で変換候補を表示する処理に来ることがある』ことを想定していなかったので、 変換候補が0の状態でも変換候補を表示する処理が実行されることがあることを考慮した処理に変更してみました よろしければその変更を加えたこちらのバージョンをお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース
メンテ
Re: DrawKeyInputStringのエラー ( No.6 )
名前:Tir(解決) 日時:2017/08/06 10:19

対応ありがとうございます。 > 止まっている箇所は『変換候補を表示する』処理なので、zを入力しただけでは普通に考えると変換候補は > 表示されない筈なので、なぜここにきてしまっているのか謎です 実は制作中のプロジェクトの方で実行すると変換候補が梵字みたいになったりしてました。 zキーを押しただけでこうなります。 ttp://i.imgur.com/HjyX6sv.jpg サンプルプログラムの方は正常に動きましたし制作中のプロジェクトも今の所エラー落ちはしていません。 ただ制作中のプロジェクトでは確実に発生する訳ではありませんでしたし。上記の画像のように変換候補がおかしくなっていても 落ちずに動作したり、そもそもDrawKeyInputStringでエラーが発生していたりしていたので多少不安は残りますが 恐らくこれで大丈夫だと思いますので解決とさせて頂きます。
メンテ
Re: DrawKeyInputStringのエラー ( No.7 )
名前:yumetodo 日時:2017/08/06 12:59

どこかでCP932<->UTF16の変換をミスっているのだろうか・・・
メンテ
Re: DrawKeyInputStringのエラー ( No.8 )
名前:Tir 日時:2017/08/07 00:40

すみません。新しいバージョンを試したところ全く関係ないところで効果音が一定間隔で鳴り続ける不具合が発生しました。 バージョンを元に戻すと直ります。効果音を鳴らす部分は関数にまとめているのでそこにブレークポイントを入れても引っかかりません。 これは元々僕のプログラムに問題があって変なところを参照しているのをDXライブラリの構造が変わって効果音を鳴らす所を参照しているって事でしょうか… 追記 色々調べたところ効果音そのものが原因でした。何故か特定の効果音を今回修正したDXライブラリで鳴らすと鳴り続けるみたいです。
メンテ
Re: DrawKeyInputStringのエラー ( No.9 )
名前:管理人 日時:2017/08/07 00:46

> 実は制作中のプロジェクトの方で実行すると変換候補が梵字みたいになったりしてました。 > zキーを押しただけでこうなります。 > ttp://i.imgur.com/HjyX6sv.jpg エラー落ちはしなくなったのは何よりですが、まだ完全には直せていないようです… 私の環境で現象が発生しないのは使用しているOSやIMEが異なるからかもしれないので、 よろしければTirさんがお使いの環境のOSと使用されているIMEを教えて頂けないでしょうか? ( Windows10 で GoogleIME ( 又は ATOK )、など ) > どこかでCP932<->UTF16の変換をミスっているのだろうか・・・ IMM32 の代わりに最近使い始めた Tsf( Text Services Framework ) をまだ正しく使えてないのだと思います… > 色々調べたところ効果音そのものが原因でした。何故か特定の効果音を今回修正したDXライブラリで鳴らすと鳴り続けるみたいです。 最近 wav ファイルの中にループポイント( smplチャンク )の情報が含まれていると その情報を元にループ再生するようにするようにしたので、恐らくその影響ではないかと思います ( 少し前には Ogg ファイルのループポイント情報にも対応したので、そちらかもしれませんが ) wav ファイルのループポイントの設定は編集は『Wavosaur』というソフトでできるようですので、 wav ファイルでしたらよろしければご確認になってみてください m(_ _)m
メンテ
Re: DrawKeyInputStringのエラー ( No.10 )
名前:Tir 日時:2017/08/07 00:55

使用OSはWindows10でMicrosoft IMEです。 効果音の方はメモリ関係のバグじゃなくて安心しました。
メンテ
Re: DrawKeyInputStringのエラー ( No.11 )
名前:管理人 日時:2017/08/10 21:55

ご返信が遅くなり申し訳ありません 使用されているOSやIMEは標準のものなのですね、私の Windows10 環境と同じでした… コードを再度見直して、原因となりえそうな箇所に変更を加えてみましたので 何度も申し訳ありませんが、よろしければその変更を加えたこちらのバージョンを お試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース
メンテ
Re: DrawKeyInputStringのエラー ( No.12 )
名前:Tir(解決) 日時:2017/08/11 12:59

上記のバージョンで無事にzなどの1文字の場合変換候補が出現しないことが確認できました。
メンテ

Page: 1 |

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

   クッキー保存