トップページ > 記事閲覧
GetKeyInputでクラッシュします
名前:ななしのなす 日時: 2018/03/21 13:45

いつもお世話になっています。 概ね題名通りです。 まず全角で28字を超える文字を入れ、GetKeyInputに通すと28字まで切り落とされます。 28+6からは少しフリーズしてから動作が停止(クラッシュ)します。 28+11からは例外が発生します。 言語は、C#。環境は、Visual Studio Community 2017。OSは、Windows 10 home(64bit)になります。 C#特有の問題なのでしょうか・・・。どうかよろしくお願いします! 以下、テスト用にコードを置いておきます。 static class Program { [STAThread] static void Main() { DX.SetGraphMode(900, 600, 32); DX.ChangeWindowMode(1); DX.DxLib_Init(); DX.SetDrawScreen(DX.DX_SCREEN_BACK); int keyinput = -1; string str = "入力した文字列がここに表示されます。"; while (DX.ProcessMessage() != -1) { DX.ClearDrawScreen(); if(DX.CheckHitKey(DX.KEY_INPUT_SPACE)==1) { DX.DeleteKeyInput(keyinput); keyinput = DX.MakeKeyInput(100, 1, 0, 0); DX.SetActiveKeyInput(keyinput); //DX.SetKeyInputString(new string('あ',28+0),keyinput); } if (DX.CheckKeyInput(keyinput) == 1) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); DX.GetKeyInputString(sb, keyinput); str = sb.ToString(); } DX.DrawKeyInputString(137, 100, keyinput); DX.DrawString(137, 120, str, DX.GetColor(255, 255, 255)); DX.DrawString(150, 60, "+6〜動作を停止", DX.GetColor(255, 255, 255)); DX.DrawString(200, 40, "+11〜System.AccessViolationException' のハンドルされていない例外が発生", DX.GetColor(255, 255, 255)); DX.DrawString(0, 80, "28字まで保持:123456789ABCDEF123456789ABCD", DX.GetColor(255, 255, 255)); DX.ScreenFlip(); } DX.DxLib_End(); } }
メンテ

Page: 1 |

Re: GetKeyInputStringでクラッシュします ( No.1 )
名前:ななしのなす 日時:2018/03/21 14:14

GetKeyInputではなく、正しくはGetKeyInputStringでした。
メンテ
Re: GetKeyInputでクラッシュします ( No.2 )
名前:管理人 日時:2018/03/21 23:21

DX.GetKeyInputString に渡す System.Text.StringBuilder は、予め受け取る文字列の長さが 十分に収まる容量を持っておく必要があります なので、 System.Text.StringBuilder sb = new System.Text.StringBuilder(); こちらの部分を、以下のように文字列が十分に収まるサイズを指定するようにするとクラッシュしなくなります System.Text.StringBuilder sb = new System.Text.StringBuilder(4096); 因みにコンストラクタに何の値も指定しない場合にどのくらいの容量が割り当てられるかは C#言語の仕様としては特に決められていないそうなので、おそらくななしのなすさんが試された情報から 推察すると 28 くらいを指定した場合と同じような動作になっているのではないかと思います
メンテ
Re: GetKeyInputでクラッシュします ( No.3 )
名前:ななしのなす(解決) 日時:2018/03/22 07:21

おかげで正常に動作するようになりました。 標準ライブラリでもクラッシュするんですね(・・;) 勉強になりました。ありがとうございました!m(_ _;)m
メンテ

Page: 1 |

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

   クッキー保存