Работа с COM портами в VB????
Формулировка задачи:
Подскажите, пожалуйста возможные способы программирования работы с СОМ портами!!!
Использование MSComm мне не особенно подходит, поскольку складывается впечатление, что это дело
хорошо работает лишь с модемами. Возможно есть
к.л процедуры WinApi?
Я побывал на многих сайтах. Для С++ и иже с ними
ссылок и примеров полно, а для VB - практически ничего!!! Что за дискриминация такая???? ((
Решение задачи: «Работа с COM портами в VB????»
textual
Листинг программы
- Declare Function WriteFile& Lib 'kernel32' _
- (ByVal hFile As Long, lpBuffer As Any, _
- ByVal nNumberOfBytesToWrite&, _
- lpNumberOfBytesWritten&, ByVal lpOverlapped&)
- Declare Function CreateFile& Lib 'kernel32' Alias 'CreateFileA' _
- (ByVal lpFileName$, ByVal dwDesiredAccess&, _
- ByVal dwShareMode&, ByVal lpSecurityAttributes&, _
- ByVal dwCreationDisposition&, ByVal dwFlagsAndAttributes&, _
- ByVal hTemplateFile&)
- Declare Function CloseHandle& Lib 'kernel32' (ByVal hObject&)
- Declare Function FlushFileBuffers& Lib 'kernel32' (ByVal hFile&)
- Function DialNumber(PhoneNumber, CommPort As String)
- Const WAITSECONDS=5
- Dim bModemCommand(256) As Byte, ModemCommand As String
- Dim OpenPort As Long
- Dim RetVal As Long, RetBytes as Long, i as integer
- Dim StartTime
- OpenPort = CreateFile(CommPort, &HC0000000, 0, 0, 3, 0, 0)
- If OpenPort = -1 Then Exit Sub
- ModemCommand = 'ATDT' & PhoneNumber & vbCrLf
- For i = 0 To Len(ModemCommand) - 1
- bModemCommand(i) = Asc(Mid(ModemCommand, i + 1, 1))
- Next
- RetVal = WriteFile(OpenPort, bModemCommand(0), _
- Len(ModemCommand), RetBytes, 0)
- If RetVal = 0 Then GoTo Err_DialNumber
- RetVal = FlushFileBuffers(OpenPort)
- StartTime = Timer
- While Timer < StartTime + WAITSECONDS
- DoEvents
- Wend
- ModemCommand = 'ATH0' & vbCrLf
- For i = 0 To Len(ModemCommand) - 1
- bModemCommand (i) = Asc(Mid(ModemCommand, i + 1, 1))
- Next
- RetVal = WriteFile(OpenPort, bModemCommand(0), _
- Len(ModemCommand), RetBytes, 0)
- RetVal = FlushFileBuffers(OpenPort)
- Err_DialNumber:
- RetVal = CloseHandle(OpenPort)
- End Function
- Буффер bModemCommand можно описать как я показывал раньше (тип buf), я там только ошибся.
- Надо так (буффер должен быть фиксированной длины иначе прога будет просто вылетать):
- Type buf
- b as string*1 (в этом примере b as string*256)
- End Type
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д