掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CommXでメモリエラーを解決するには? (ID:44200)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Delphi6(professional)で、CommXコンポーネントを使用してシリアル通信をするプログラムを作成しています。 画面からボタンイベントでTransStringの問い合わせ文を送信し、ReceiveBlockで結果を受信しています。 受信は1byteずつで、結果の伝文の終了コードまでループして取得しています。 処理としては特に問題なくできるのですが、処理が終わりもう一度ボタンをクリックする流れを7,8回繰り返すと、メモリエラーを発生したり、「無効なポインタ操作です」が発生したりします。 このエラーが発生するのは、ボタン処理後になり途中で発生する事はありません。 メモリエラーはボタン処理後の別の処理のDBアクセス(Query操作)で起こります。 処理後はじめのDBアクセスの部分ではなく、2回目の場所だったりと不規則です。 何かアドバイスがあれば教えていただけますでしょうか? 流れとしては下記の通りになります。 procedure SendBtn4Click(Sender: TObject); var Buf : PChar; receive : String; BLen : Integer; begin CommX.PortOpen; 伝文作成 略 CommX.TransString(伝文); while XX do begin try Buf := AllocMem(1); BLen := CX.ReceiveBlock(Buf,1); except CommX.ClearReceiveBuf; CommX.ClearTransBuf; FreeMem(Buf); CommX.PortClose; Exit; end; if Buf[0] = 終了コード($04) then begin CommX.ClearReceiveBuf; CommX.ClearTransBuf; FreeMem(Buf); break; end else begin receive := receive + Buf[0]; 結果伝文表示処理 略 end; FreeMem(Buf); end; CommX.PortClose; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.