Mscommでバイナリ受信を行うには?


まんぼう  2006-11-15 05:42:36  No: 97192

Mscommでデータを受信する際
Inputmodeをテキストモードで下記のコードで行っています。
しかし、1バイト文字の場合は問題ないのですが
2バイト文字の場合、2バイトの上位1バイトを受信した場合
文字化けが発生します。
バイナリモードで受信する方法までは分かったのですが
下記コードを元に変更する場合は、どのようにすればよいか
悩んでいます。どなたかご教授願います。

Dim txt As String
Dim ret As String

    Do
        ret = BuffRed
        Select Case ret
            '-- LF
            Case Chr$(&HA)  '-- LF
            '-- CR
            Case Chr$(&HD)  '-- CR
                Debug.Print txt
                Exit Sub
            Case Else
                txt = txt + ret  ←この部分をバイト配列で結合する場合は?
        End Select
    Loop

Private Function BuffRed()
    BuffRed = Comm1.Input
End Function


ヤマ@文系  2006-11-15 06:05:38  No: 97193

まず、stringで宣言されているのを
byte配列に変えましょう。

過去ログに似たようなのが
'http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200310/03100030.txt


魔界の仮面弁士  2006-11-15 06:41:58  No: 97194

> txt = txt + ret  ←この部分をバイト配列で結合する場合は?

受信したバイト配列を、一時ファイルに Put # していき、
完了時点でそれを Get # で取り出す…という方法は如何でしょう。

もしも一時ファイルを作りたくないのであれば、ストリームが便利かも。

Dim bin() As Byte        '受信データを受け取る変数
Dim Stm As ADODB.Stream  'バイナリを蓄えるためのストリーム

'バイナリストリームを作成
Set Stm = New ADODB.Stream
Stm.Type = adTypeBinary
Stm.Open
'
' ……略……
'
    '受信したバイナリを連結
    Stm.Write bin   'これが「txt = txt & ret」に相当する処理
'
' ……略……
'

'Shift_JIS のテキストストリームに切り替えて、
'受信したバイナリを、文字列として取得する。
Stm.Position = 0
Stm.Type = adTypeText
Stm.Charset = "Shift_JIS"
txt = Stm.ReadText(adReadAll)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加