Хендл com порта в VB работает, в ЕХЕ нет.
Есть устройство подключено к COM порту. Пишу приложение которое умеет с ним общаться. Так вот, в самом компиляторе РАБОТАЕТ, а после компиляции в ехе файл НЕТ!!!. Монитор портов показывает, что порт открывается, но данные туда не уходят.
Определение хендла порта..
Код:
ComNum = CreateFile(ComNumber, &HC0000000, 0, 0&, &H3, 0, 0)
разность номеров в VB и в ЕХЕ большая VB(~1300), ЕХЕ(~650)..
Думаю проблема в этом, т.к. можно отловить ошибку записи в порт.
Прилагаю кусочки..
Код:
Public Function Init_Com(ComNumber As String, Comsettings As String) As Boolean
On Error GoTo handelinitcom
Dim ComSetup As DCB, Answer, Stat As COMSTAT, RetBytes As Long
Dim retval As Long
Dim CtimeOut As COMMTIMEOUTS, BarDCB As DCB
ComNum = CreateFile(ComNumber, &HC0000000, 0, 0&, &H3, 0, 0)
If ComNum = -1 Then
'MsgBox "Com Port " & ComNumber & " not available. Use Serial settings (on the main menu) to setup your ports.", 48
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)
If retval = -1 Then
retval = GetLastError()
'MsgBox "Unable to set timeouts for port " & ComNumber & " Error: " & retval
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
retval = BuildCommDCB(Comsettings, BarDCB)
If retval = -1 Then
retval = GetLastError()
'MsgBox "Unable to build Comm DCB " & Comsettings & " Error: " & retval
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
retval = SetCommState(ComNum, BarDCB)
If retval = -1 Then
retval = GetLastError()
'MsgBox "Unable to set Comm DCB " & Comsettings & " Error: " & retval
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
Init_Com = True
handelinitcom:
Exit Function
End Function
On Error GoTo handelinitcom
Dim ComSetup As DCB, Answer, Stat As COMSTAT, RetBytes As Long
Dim retval As Long
Dim CtimeOut As COMMTIMEOUTS, BarDCB As DCB
ComNum = CreateFile(ComNumber, &HC0000000, 0, 0&, &H3, 0, 0)
If ComNum = -1 Then
'MsgBox "Com Port " & ComNumber & " not available. Use Serial settings (on the main menu) to setup your ports.", 48
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)
If retval = -1 Then
retval = GetLastError()
'MsgBox "Unable to set timeouts for port " & ComNumber & " Error: " & retval
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
retval = BuildCommDCB(Comsettings, BarDCB)
If retval = -1 Then
retval = GetLastError()
'MsgBox "Unable to build Comm DCB " & Comsettings & " Error: " & retval
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
retval = SetCommState(ComNum, BarDCB)
If retval = -1 Then
retval = GetLastError()
'MsgBox "Unable to set Comm DCB " & Comsettings & " Error: " & retval
retval = CloseHandle(ComNum)
Init_Com = False
Exit Function
End If
Init_Com = True
handelinitcom:
Exit Function
End Function
Код:
Public Function WriteCOM32(lenByte As Integer) As Integer
On Error GoTo handelwritelpt
Dim RetBytes As Long, LenVal As Long
Dim retval As Long
retval = WriteFile(ComNum, bRead(0), lenByte, RetBytes, 0)
WriteCOM32Hex = RetBytes
handelwritelpt:
Exit Function
End Function
On Error GoTo handelwritelpt
Dim RetBytes As Long, LenVal As Long
Dim retval As Long
retval = WriteFile(ComNum, bRead(0), lenByte, RetBytes, 0)
WriteCOM32Hex = RetBytes
handelwritelpt:
Exit Function
End Function
Пример использования..
Код:
WriteCOM32Hex (6)
Где "6" - это длина в байтах
bRead() - Глоб. переменная тип byte(255)
Повторюсь, в самом компиляторе все отлично работает, после компиляции нет :confused: ... В чем может быть затык ?
Проект->Свойства->Компиляция
это в версии VB2008, VB2010
Цитата: UserNet2008
Возможно поможет настройка компилятора
Проект->Свойства->Компиляция
это в версии VB2008, VB2010
Проект->Свойства->Компиляция
это в версии VB2008, VB2010
Я в 6 версии..
Все равно спасибо, проблема решена.
Тема закрыта.
Цитата: Underwood
Все равно спасибо, проблема решена.
Тема закрыта.
Тема закрыта.
Офигенный партизан! Лень написать как?