機器上沒有串口,虛擬串口軟體VSPD增加的虛擬串口,編譯環境VS2010(系統XP Sp3),在vb.net下呼叫api函式寫串口程式,createfile是可以打開串口的,但是settimeouts的時候出現超時錯誤,求教大神~~
Ps:我serialport寫的程式是可以在虛擬串口下正常使用的。
程式如下:
Private Function Init_Com(ByVal ComNumber As String, ByVal Comsetting As String) As Boolean
Try
Dim ComSetup As DCB
Dim Answer As COMSTAT
Dim Start As COMSTAT
Dim RetBytes As Long
Dim retval As Long
Dim CtimeOut As COMMTIMEOUTS
Dim BarDCB As DCB
Dim sa As SECURITY_ATTRIBUTES
ComNum = CreateFile(ComNumber, &HC0000000, 0, 0, &H3, 0, 0)
If -1 = ComNum Then
MessageBox.Show("埠" & ComNumber & "無效,請正確設定")
Init_Com = False
Exit Function
End If
'超時
CtimeOut.ReadIntervalTimeout = 20
CtimeOut.ReadTotalTimeoutConstant = 1
CtimeOut.ReadTotalTimeoutMultiplier = 1
CtimeOut.WriteTotalTimeoutConstant = 10
CtimeOut.WriteTotalTimeoutMultiplier = 1
retval = SetCommTimeouts(ComNum, CtimeOut) '回傳-1,出錯誤了!!!!!!!!!!!
If retval = -1 Then
retval = GetLastError()
MessageBox.Show("埠超時設定無效" & ComNumber & "錯誤" & retval)
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
retval = BuildCommDCB(Comsetting, BarDCB)
If -1 = retval Then
retval = GetLastError()
MessageBox.Show("無效設備DCB塊" & Comsetting & "錯誤:" & retval)
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
retval = SetCommState(ComNum, BarDCB)
If -1 = retval Then
retval = GetLastError()
MessageBox.Show("無效設備DCB塊" & Comsetting & "錯誤" & retval)
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Function
uj5u.com熱心網友回復:
從簡化代碼和設計難度的角度出發,還是建議你采用MSComm控制元件實作串口通信,代碼簡單,且運行穩定。程式設計的主旨就是要:去繁求簡uj5u.com熱心網友回復:
如果你一定要研究API,我給你提供一個VB6的例子:http://download.csdn.net/detail/veron_04/1339593
uj5u.com熱心網友回復:
//...
if(hComm == INVALID_HANDLE_VALUE){
hComm = 0;
return FALSE;
}
// 設定捕獲事件型別
SetCommMask(hComm, EV_RXFLAG);
// 設定輸入輸出緩沖區大小
SetupComm(hComm, 4096, 4096);
// 清緩輸入輸出沖區
PurgeComm(hComm, PURGE_RXABORT|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_TXCLEAR);
// 通訊超時引數設定
COMMTIMEOUTS CommTimeOut;
CommTimeOut.ReadIntervalTimeout = 500; //設定讀超時 MAXDWORD
CommTimeOut.ReadTotalTimeoutConstant = 500;
CommTimeOut.ReadTotalTimeoutMultiplier = 500;
CommTimeOut.WriteTotalTimeoutConstant = 500;
CommTimeOut.WriteTotalTimeoutMultiplier = 100; //設定寫超時
SetCommTimeouts(hComm,&CommTimeOut); //設定超時
//...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/142447.html
標籤:API
