VBで文字列をリードするには以下のような、2種類の方法があります。
1. VBでReadDeviceStrを利用し文字列をリードする場合
この場合、事前にリードした文字列の格納先のサイズを指定 (固定) する必要があります。
Public Sub Sample1()
Dim strData As String * 10 '読み込むサイズを指定しているので正しい指定方法
'Dim strData As String '文字列のサイズを指定していないので誤った指定方法
Dim IErr As Long
IErr = ReadDeviceStr("ReadDeviceStrD", "ReadDeviceVariantD", strData, 10)
If IErr <> 0 Then
MsgBox "Read Error = " & IErr
Else
MsgBox "Read String = " & strData
End If
End Sub
2. VBでReadDeviceVariantを利用し文字列をリードする場合
事前にリードした文字列の格納先のサイズを指定しない場合はVariant型を利用します。
Public Sub Sample2()
Dim IErr As Long
Dim vrData As Variant '読み込んだデータの格納先にVariant型を指定します
IErr = ReadDeviceVariant("GP1", "LS100", vrData, 10, EASY_AppKind_Str)
If IErr <> 0 Then
MsgBox "Read Error = " & IErr
Else
MsgBox "Read String = " & vrData
End If
End Sub
ここで気を付ける点として、WinGP SDKは文字列の完結にNULLを利用しています。そのため、上記の方法で取得した文字列に文字列完結のNULLがあれば、文字列を縮める必要があります。
文字列をNULLまで縮めるサンプル関数を示します。
Public Function TrimNull(strData As String) As String
Dim i As Integer
i = InStr(1, strData, Chr$(0), vbBinaryCompare)
If 0 < i Then
TrimNull = Left(strData, i - 1)
Else
TrimNull = strData
End If
End Function