VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/07/19(Tue) 18:00
投稿者GOD
Eメール
URL
タイトルRe^3: MSCommバイナリーデータ受信処理

> ' データを一括で受信できるようにする
> MSComm1.InBufferCount = 0
>
--- MSDNから抜粋
InBufferCount プロパティを 0 に設定すると、受信バッファをクリアすることができます。
--- ここまで

受信ボタンを押下するたびに毎回、初期化しているみたいですが、なぜでしょうか。
ポートのオープン前に一度初期化すればいいと思うのですが。

>  If Len("Buffer") = 6 Then
> >条件が常にTrueになりますが・・・
> 申し訳ございません。理解することができません。
>
"Buffer"は""で囲まれているのでBuffer という文字列です。
Len("Buffer")はBufferという文字列が6文字であるか比較しています。
その結果、条件は常にTrueを返します。
さらにいうとBuffer変数はByte配列として宣言しています。
MSComm1.InputMode = comInputModeBinary
を設定することによりMSComm1.Inputは
--- MSDNから抜粋
バイナリ データがバリアント型のバイト配列で読み取られます。
--- ここまで
となっていますので、受信バイト数は配列の次元と比較するべきです。
if Ubound(Buffer) = 5 Then
↑5と比較したのは通常なにも指定しない(Option Baseステートメント)と0〜5の要素を使用して6Byte格

します。UBoundは次元の最大値を返す為に5となります。
ヘルプと実験で理解してください。

> >If Mid(Buffer, 1, 1) <> COMM_CODE.DLE Then MsgBox "DLE 1 NG"
> >文字列と数値を比較するようになってますね。
> >そもそもBufferって文字列じゃない見たいですが。
> まずBufferというバイナリーデータを数値に変換することが先なのでしょうか・・?!
' If Buffer(0) <> COMM_CODE.DLE Then MsgBox "DLE 1 NG"
のコメントを外して使用すればいいはずです。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -