トップページ > 記事閲覧
C#版のGetPcInfo
名前:lego hasiri 日時: 2020/12/06 20:36

おそらくバグかと思われます。 C#版のGetPcInfo関数にて情報を得た場合に一部が正しく情報が得られていないように思います。 以下ソース DX.ChangeWindowMode(DX.TRUE); DX.SetGraphMode(640, 480, 32); if (DX.DxLib_Init() == -1) return; DX.SetDrawScreen(DX.DX_SCREEN_BACK); StringBuilder OS = new StringBuilder(), DirectX = new StringBuilder(), CPU = new StringBuilder(), VideoDriverFileName = new StringBuilder(), VideoDriverString = new StringBuilder(); DX.GetPcInfo(OS, DirectX, CPU, out int CPUSpeed, out double FreeMemorySize, out double TotalMemorySize, VideoDriverFileName, VideoDriverString, out double FreeVideoMemorySize, out double TotalVideoMemorySize); while (DX.CheckHitKey(DX.KEY_INPUT_ESCAPE) == 0) { DX.ProcessMessage(); DX.ClearDrawScreen(); DX.DrawString(0, 0, OS.ToString(), 0xffffff); DX.DrawString(0, 20, DirectX.ToString(), 0xffffff); DX.DrawString(0, 40, CPU.ToString(), 0xffffff); DX.DrawString(0, 60, CPUSpeed.ToString(), 0xffffff); DX.DrawString(0, 80, FreeMemorySize.ToString(), 0xffffff); DX.DrawString(0, 100, TotalMemorySize.ToString(), 0xffffff); DX.DrawString(0, 120, VideoDriverFileName.ToString(), 0xffffff); DX.DrawString(0, 140, VideoDriverString.ToString(), 0xffffff); DX.DrawString(0, 160, FreeVideoMemorySize.ToString(), 0xffffff); DX.DrawString(0, 180, TotalVideoMemorySize.ToString(), 0xffffff); DX.ScreenFlip(); } DX.DxLib_End(); return; 以上ソース 実行結果 ttps://gyazo.com/045839072672ce8115603428f1bfc41d 実行環境 Windows10 メモリ 16GB CPU Intel i7-7500U 2.70GHz DirectXは最新のはずです "OS"と"DirectX"がうまく取得できていないように思います。 また、実行後しばらくするとエラー(FatalExecutionEngineError)が高確率で発生します。 バグでしょうか?それとも当方の問題でしょうか
メンテ

Page: 1 |

Re: C#版のGetPcInfo ( No.1 )
名前:lego hasiri 日時:2020/12/06 20:41

補足です。 エラー ttps://gyazo.com/8691a729d4f9e4948be22c4c27486114
メンテ
Re: C#版のGetPcInfo ( No.2 )
名前:管理人 日時:2020/12/06 22:16

すみません、仕様となります DXライブラリC#版で引数が StringBuilder となっている関数では、関数の中で StringBuilder の バッファのサイズを適正なものに変更してくれないので、予めバッファ長を初期化時に指定しておく必要があります なので StringBuilder OS = new StringBuilder(), DirectX = new StringBuilder(), CPU = new StringBuilder(), VideoDriverFileName = new StringBuilder(), VideoDriverString = new StringBuilder(); こちらの部分を StringBuilder OS = new StringBuilder(512), DirectX = new StringBuilder(512), CPU = new StringBuilder(512), VideoDriverFileName = new StringBuilder(512), VideoDriverString = new StringBuilder(512); のように、格納される文字列が間違いなく収まるであろうサイズで初期化するように変更すると、 エラーが発生しなくなります よろしければお試しください m(_ _)m
メンテ
Re: C#版のGetPcInfo ( No.3 )
名前:lego hasiri(解決済み) 日時:2020/12/06 22:50

解答ありがとうございます。 しっかり動作確認できました。他のStringBuilderにも適応させておきます。
メンテ

Page: 1 |

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

   クッキー保存