Работа с 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5