お世話になります。
rs232c通信のプログラムをダウンロードしまして(vb2005)
改行コードなどの無いデータを以下のソースより
1)Shift-Jisからユニコードに変換
2)Unicodeの配列から文字列に変換
などを行い TextBox3 へ追加しようと試みたのですが
エラーが発生してしまいます。
①の strGetTextを doubleの変数を作って代入することはできたのですが
分かる範囲で試してみたのですが
エラーを回避できない状態です。
改行コードが無いからエラーが上がるのでしょうか?
dim len As Integer
dim x As Double
len = strGetText.Lengh
x = CDbl(Mid(strGetText,1,len)
x=99.9999
テキストボックスへ追加するためには
どのような操作を行えば良いのでしょうか?
① Delegate Sub dlgAddText(ByVal str As String)
Private Sub AddText(ByVal strGetText As String)
'受信データーをテキストボックスに追加する
TextBox3.AppendText(strGetText)
'キャレットを文字の最後に設定す
TextBox3.ScrollToCaret()
End Sub
'---------------------------------
'セリアルポートの受信イベント
'---------------------------------
Dim lByte As List(Of Byte) = New List(Of Byte)
Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
Handles SerialPort1.DataReceived
'データ受信用のバイト配列
Dim inByte(SerialPort1.BytesToRead - 1) As Byte
'データの読み込み
SerialPort1.Read(inByte, 0, SerialPort1.BytesToRead)
'読み込んだデータを改行を確認しながらジェネリクスに移す
For i As Integer = 0 To inByte.Length - 1
lByte.Add(inByte(i)) 'ジェネリクスに足しこむ
'改行が有った
If lByte.Count > 2 AndAlso lByte(lByte.Count - 2) = 13 AndAlso lByte(lByte.Count - 1) = 10 Then
'ジェネリクスからByte配列に移す
Dim tmpByte(lByte.Count - 1) As Byte
For j As Integer = 0 To lByte.Count - 1
tmpByte(j) = lByte(j)
Next
lByte.Clear() 'ジェネリクスをクリアー
'Shift-Jisからユニコードに変換
Dim uniByte() As Byte = Encoding.Convert(encSjis, encUni, tmpByte)
'Unicodeの配列から文字列に変換
Dim uniString As String = encUni.GetString(uniByte)
'メインスレッドのテキストに追加する
Me.Invoke(New dlgAddText(AddressOf AddText), New Object() {uniString})
'上は下の記述の短縮形
' dlgAddText dlgT = new dlgAddText(AddressOf AddText);
' Me.Invoke(dlgT, uniString)
End If
Next
End Sub
'これは参考で使っていません
'--------------------------------
'ユニコードの文字列をS-Jisに変換
'--------------------------------
Private Function UniToSjis(ByVal strUni As String) As String
'unicodeのEcodingクラスに作成
Dim ecUni As Encoding = Encoding.Unicode
's-jisのEncodingクラスの作成
Dim ecSjis As Encoding = Encoding.GetEncoding("shift-jis")
Dim byteUni As Byte() = Encoding.Default.GetBytes(strUni)
Dim byteSjis As Byte() = Encoding.Convert(ecUni, ecSjis, byteUni)
'unicodeのバイト配列からテキストに変換
Return ecSjis.GetString(byteSjis)
End Function
'これも参考で使っていません
'---------------------------------
'Sjisをユニコードの文字列をに変換
'---------------------------------
Private Function SjisToUni(ByVal strSjis As String) As String
'unicodeのEcodingクラスに作成
Dim ecUni As Encoding = Encoding.Unicode
's-jisのEncodingクラスの作成
Dim ecSjis As Encoding = Encoding.GetEncoding("shift-jis")
Dim byteSjis As Byte() = Encoding.Default.GetBytes(strSjis)
Dim byteUni As Byte() = Encoding.Convert(ecSjis, ecUni, byteSjis)
'sjisのバイト配列からテキストに変換
Return ecUni.GetString(byteUni)
End Function
End Class