VB.netでのwin32api呼び出し
VB.netでwin32apiを呼び出したが変数にデータが正しくセットされない
vb6.0のプログラムをvb.netに移植作業しています。
vb.netで機器との通信を行うためwinapi32で作られたドライバdllをインポートしたのですが受信データが正常に受け取れません。もう1週間も悩み続けています。
詳しい方お助けください。
//win32api側//
DWORD Receive(HANDLE handle,PBYTE pbReceiveBuffer,WORD wBufferLength, _
PWORD pwReceiveLength,PDWORD pdwErrCode);
//VB側//
<DllImport("Des_DLL", CharSet:=CharSet.Auto)> _
Public Function Receive(ByVal hPath As Intptr, ByRef ReceiveBuffer As IntPtr, _
ByVal ReceiveBuffLength As Ushort ByRef ReceiveLength As Ushort, _
ByRef lErrCode As Uint) As Uint
End Function
Dim rd_buf(1018) As Byte
Dim rbf_l As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(rd_buf)) 'アンマネージメモリ 確保
Marshal.Copy(rbf_l, rd_buf, 0, rd_buf.Length) 'アンマネージメモリからマネージメモリにコピー
ret = Receive(Path, rbf_l, rdbuffer_length, rd_length, ErrCode)
Call des_datawrite(rd_buf, rd_length, 2) ' 受信データの書き込み
For i = 0 To rd_length - 1 ' 受信データセット
DES.rd_buf(DES.rd_cnt) = rd_buf(i)
DES.rd_cnt = DES.rd_cnt + 1
Next i
DesRD_Normal = True
Marshal.FreeCoTaskMem(rbf_l)
End Function
Receive()は機器からの情報吸い上げレスポンス関数です。
Public Sub des_datawrite(ByVal wt_data() As Byte, ByVal length As Integer, ByVal Mode As Integer)
Dim free_num As Integer
Dim i As Integer
Dim cv_buf As String
cv_buf = ""
For i = 0 To length - 1
cv_buf = cv_buf & Microsoft.VisualBasic.Right("00" & Hex(wt_data(i)), 2) & " "
Next i
free_num = FreeFile()
FileOpen(free_num, GetAppPath() & DES_DATA, OpenMode.Append)
If Mode = 1 Then
Print(free_num, "[<-sd(" & DateTime.Now.ToString("yyyyMMddHHmm") & ")]" & Mid (cv_buf, 1, Len(cv_buf) - 1))
ElseIf Mode = 2 Then
ElseIf Mode = 2 Then
Print(free_num, "[->rd(" & DateTime.Now.ToString("yyyyMMddHHmm") & ")]" & Mid(cv_buf, 1, Len(cv_buf) - 1))
End If
FileClose(free_num)
End Sub
お礼
返信が遅くなってしまってすみません。 大変参考になりました。ありがとうございました。