Làm thế nào để truy cập vào cổng nối tiếp, song song bằng cách sử dụng Visual Basic.NET

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:823179
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
Đối với một phiên bản Microsoft Visual Studio 2005 này viết, xem 904795.
TÓM TẮT
Bài từng bước này mô tả cách tiếp cận nối tiếp cổng và làm thế nào để truy cập vào cổng song song bằng cách sử dụng Microsoft Visual Basic.NET. Bài viết này cũng chứa mẫu mã mà minh họa những khái niệm được thảo luận trong bài viết này.

Yêu cầu

Các danh sách sau đây vạch ra được đề nghị phần cứng, phần mềm, mạng cơ sở hạ tầng, và gói dịch vụ mà bạn cần:
  • Microsoft Windows Server 2003, Microsoft Windows XP, hoặc Microsoft Windows 2000
  • Visual Basic.NET
Điều này bài giả định rằng bạn đã quen thuộc với các chủ đề sau:
  • Lập trình bằng Visual Basic.NET
  • Nền tảng gọi dịch vụ trong Visual Basic.NET

Sử dụng điều khiển MSComm trong Visual Basic.NET để truy cập vào cổng tuần tự

Bởi vì không có Microsoft.Các lớp học NET Framework tồn tại để truy cập các tài nguyên liên lạc kết nối với máy tính của bạn, bạn có thể sử dụng các MSComm kiểm soát trong Microsoft Visual Basic 6.0. Các MSComm Control cung cấp giao tiếp nối tiếp cho ứng dụng của bạn bởi tạo điều kiện cho truyền và nhận dữ liệu qua một cổng nối tiếp. Để thực hiện cơ bản nối tiếp truyền bằng cách sử dụng một modem, hãy làm theo các bước sau:
  1. Bắt đầu Microsoft Visual Studio.NET.
  2. Trên các Tệp trình đơn, điểm đếnMới, sau đó bấm Dự án.
  3. Dưới Các loại dự án, bấm Thị giác Các dự án cơ bản.
  4. Dưới Khuôn mẫu, bấm Giao diện điều khiển Ứng dụng.
  5. Trong các Tên hộp, loạiMyConsoleApplication, sau đó bấmOk.

    Theo mặc định, Module1.vb được tạo ra.
  6. Nhấp chuột phải vào các MyConsoleApplicationdự án, và sau đó nhấp vào Thêm tài liệu tham khảo.
  7. Bấm vào các COM tab, bấm vào Microsoft Comm kiểm soát 6.0 dưới Thành phần tên, bấmChọn, sau đó bấm Ok.

    Chú ý Sử dụng các MSComm kiểm soát, bạn phải cài đặt các thành phần COM có liên quan của Microsoft Visual Basic 6.0 trên cùng một máy tính có Microsoft Visual Studio.NET cài đặt.

    Cho biết thêm thông tin về giấy phép các vấn đề khi bạn sử dụng Visual Cơ bản 6,0 controls trong Visual Studio.NET, nhấp vào số bài viết sau đây để Xem bài viết trong cơ sở kiến thức Microsoft:
    318597Lỗi khi bạn sử dụng điều khiển Visual Basic 6.0 trong Visual Studio.NET
  8. Thay thế mã trong Module1.vb với đoạn mã sau Ví dụ.
    Imports MSCommLibModule Module1    Sub Main()        'New a MSComm control        Dim MSComm1 As MSComm        MSComm1 = New MSComm        ' Buffer to hold input string.        Dim Buffer As String        ' Use the COM1 serial port.        MSComm1.CommPort = 1        ' 9600 baud, no parity, 8 data, and 1 stop bit.        MSComm1.Settings = "9600,N,8,1"        ' Tell the control to read the whole buffer when Input is used.        MSComm1.InputLen = 0        ' Open the serial port.        MSComm1.PortOpen = True        Console.WriteLine("Open the serial port.")        ' Tell the control to make the Input property return text data.        MSComm1.InputMode() = InputModeConstants.comInputModeText        'Clear the receive buffer.        MSComm1.InBufferCount() = 0        ' Send the attention command to the modem.        MSComm1.Output = "ATV1Q0" & Chr(13)        Console.WriteLine("Send the attention command to the modem.")        Console.WriteLine("Wait for the data to come back to the serial port...")        ' Make sure that the modem responds with "OK".        ' Wait for the data to come back to the serial port.        Do            Buffer = Buffer & MSComm1.Input        Loop Until InStr(Buffer, "OK" & vbCrLf)        ' Read the "OK" response data in the serial port.        ' Close the serial port.        Console.WriteLine("Read the OK response data in the serial port.")        MSComm1.PortOpen = False        Console.WriteLine("Close the serial port.")    End SubEnd Module
  9. Báo chí CRTL + F5 để xây dựng và chạy dự án này. Bạn sẽ nhận thư đầu ra sau đây:
    Mở nối tiếp cảng.
    Gửi lệnh sự chú ý cho modem.
    Chờ đợi cho dữ liệu đến Quay lại cổng nối tiếp...
    Đọc dữ liệu OK phản ứng trong nối tiếp cảng.
    Đóng cổng nối tiếp.

Nền tảng sử dụng gọi dịch vụ gọi Win32 API chức năng trong Visual Basic.NET để truy cập song song và nối tiếp cổng

Để thực hiện việc này, hãy làm theo những bước sau:
  1. Bắt đầu Microsoft Visual Studio.NET.
  2. Trên các Tệp trình đơn, điểm đếnMới, sau đó bấm Dự án.
  3. Dưới Các loại dự án, bấm Thị giác Các dự án cơ bản.
  4. Dưới Khuôn mẫu, bấm Giao diện điều khiển Ứng dụng.
  5. Trong các Tên hộp văn bản, loạiMyConsoleApplication, sau đó bấmOk.

    Theo mặc định, Module1.vb được tạo ra.
  6. Thêm mã sau vào Module1.vb trước khi cácMô-đun Module1 nội dung:
    Option Strict On' Define a CommException class that inherits from the ApplicationException class, ' and then throw an object of type CommException when you receive an error message.Class CommException   Inherits ApplicationException   Sub New(ByVal Reason As String)      MyBase.New(Reason)   End SubEnd Class
  7. Tuyên bố các cấu trúc, các hằng số và tài liệu tham khảo để bên ngoài chức năng là trong Kernel32.dll

    Để gọi chức năng không được quản lý từ của bạn quản lý Visual Basic.Ứng dụng mạng, bạn phải tuyên bố tài liệu tham khảo cho các cấu trúc mà bạn vượt qua như là tham số cho các chức năng không được quản lý, và bạn phải khai báo hằng số mà bạn vượt qua như là tham số cho các chức năng không được quản lý. Để thực hiện việc này, thêm mã sau đây để Module1.vb sau khi các Mô-đun Module1 nội dung:
    'Declare structures.   Public Structure DCB   Public DCBlength As Int32   Public BaudRate As Int32   Public fBitFields As Int32 'See Comments in Win32API.Txt   Public wReserved As Int16   Public XonLim As Int16   Public XoffLim As Int16   Public ByteSize As Byte   Public Parity As Byte   Public StopBits As Byte   Public XonChar As Byte   Public XoffChar As Byte   Public ErrorChar As Byte   Public EofChar As Byte   Public EvtChar As Byte   Public wReserved1 As Int16 'Reserved; Do Not UseEnd StructurePublic Structure COMMTIMEOUTS   Public ReadIntervalTimeout As Int32   Public ReadTotalTimeoutMultiplier As Int32   Public ReadTotalTimeoutConstant As Int32   Public WriteTotalTimeoutMultiplier As Int32   Public WriteTotalTimeoutConstant As Int32End Structure'Declare constants.Public Const GENERIC_READ As Int32 = &H80000000Public Const GENERIC_WRITE As Int32 = &H40000000Public Const OPEN_EXISTING As Int32 = 3Public Const FILE_ATTRIBUTE_NORMAL As Int32 = &H80Public Const NOPARITY As Int32 = 0Public Const ONESTOPBIT As Int32 = 0'Declare references to external functions.Public Declare Auto Function CreateFile Lib "kernel32.dll" _   (ByVal lpFileName As String, ByVal dwDesiredAccess As Int32, _      ByVal dwShareMode As Int32, ByVal lpSecurityAttributes As IntPtr, _         ByVal dwCreationDisposition As Int32, ByVal dwFlagsAndAttributes As Int32, _            ByVal hTemplateFile As IntPtr) As IntPtrPublic Declare Auto Function GetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _   ByRef lpDCB As DCB) As BooleanPublic Declare Auto Function SetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _   ByRef lpDCB As DCB) As BooleanPublic Declare Auto Function GetCommTimeouts Lib "kernel32.dll" (ByVal hFile As IntPtr, _   ByRef lpCommTimeouts As COMMTIMEOUTS) As BooleanPublic Declare Auto Function SetCommTimeouts Lib "kernel32.dll" (ByVal hFile As IntPtr, _   ByRef lpCommTimeouts As COMMTIMEOUTS) As BooleanPublic Declare Auto Function WriteFile Lib "kernel32.dll" (ByVal hFile As IntPtr, _   ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToWrite As Int32, _      ByRef lpNumberOfBytesWritten As Int32, ByVal lpOverlapped As IntPtr) As BooleanPublic Declare Auto Function ReadFile Lib "kernel32.dll" (ByVal hFile As IntPtr, _   ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToRead As Int32, _      ByRef lpNumberOfBytesRead As Int32, ByVal lpOverlapped As IntPtr) As BooleanPublic Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean
  8. Trước khi bạn có thể truy cập vào một cổng nối tiếp hoặc cổng song song, bạn phải có được một xử lý thích hợp vào cổng USB và sau đó cấu hình cổng thông tin liên lạc. Để thực hiện việc này, thêm khởi tạo mã sau vào Module1.vb sau khi các Phụ chính tuyên bố.

    Chú ý Để thiết lập liên lạc với LPTx cổng, bạn phải dừng dịch vụ bộ đệm máy in. Để thực hiện việc này, hãy sử dụng công cụ dịch vụ trong Administrative Tools.
    ' Declare the local variables that you will use in the code.Dim hSerialPort, hParallelPort As IntPtrDim Success As BooleanDim MyDCB As DCBDim MyCommTimeouts As COMMTIMEOUTSDim BytesWritten, BytesRead As Int32Dim Buffer() As Byte' Declare the variables to use for encoding.Dim oEncoder As New System.Text.ASCIIEncodingDim oEnc As System.Text.Encoding = oEncoder.GetEncoding(1252)' Convert String to Byte().Buffer = oEnc.GetBytes("Test")     Try         ' Access the serial port.         Console.WriteLine("Accessing the COM1 serial port")         ' Obtain a handle to the COM1 serial port.         hSerialPort = CreateFile("COM1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)         ' Verify that the obtained handle is valid.         If hSerialPort.ToInt32 = -1 Then            Throw New CommException("Unable to obtain a handle to the COM1 port")         End If         ' Retrieve the current control settings.         Success = GetCommState(hSerialPort, MyDCB)         If Success = False Then            Throw New CommException("Unable to retrieve the current control settings")         End If         ' Modify the properties of the retrieved DCB structure as appropriate.         ' WARNING: Make sure to modify the properties according to their supported values.         MyDCB.BaudRate = 9600         MyDCB.ByteSize = 8         MyDCB.Parity = NOPARITY         MyDCB.StopBits = ONESTOPBIT         ' Reconfigure COM1 based on the properties of the modified DCB structure.         Success = SetCommState(hSerialPort, MyDCB)         If Success = False Then            Throw New CommException("Unable to reconfigure COM1")         End If         ' Retrieve the current time-out settings.         Success = GetCommTimeouts(hSerialPort, MyCommTimeouts)         If Success = False Then            Throw New CommException("Unable to retrieve current time-out settings")         End If         ' Modify the properties of the retrieved COMMTIMEOUTS structure as appropriate.         ' WARNING: Make sure to modify the properties according to their supported values.         MyCommTimeouts.ReadIntervalTimeout = 0         MyCommTimeouts.ReadTotalTimeoutConstant = 0         MyCommTimeouts.ReadTotalTimeoutMultiplier = 0         MyCommTimeouts.WriteTotalTimeoutConstant = 0         MyCommTimeouts.WriteTotalTimeoutMultiplier = 0         ' Reconfigure the time-out settings, based on the properties of the modified COMMTIMEOUTS structure.         Success = SetCommTimeouts(hSerialPort, MyCommTimeouts)         If Success = False Then            Throw New CommException("Unable to reconfigure the time-out settings")         End If         ' Write data to COM1.         Console.WriteLine("Writing the following data to COM1: Test")         Success = WriteFile(hSerialPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)         If Success = False Then            Throw New CommException("Unable to write to COM1")         End If         ' Read data from COM1.         Success = ReadFile(hSerialPort, Buffer, BytesWritten, BytesRead, IntPtr.Zero)         If Success = False Then            Throw New CommException("Unable to read from COM1")         End If      Catch ex As Exception         Console.WriteLine(Ex.Message)      Finally         ' Release the handle to COM1.         Success = CloseHandle(hSerialPort)         If Success = False Then            Console.WriteLine("Unable to release handle to COM1")         End If      End Try      Try         ' Parallel port.         Console.WriteLine("Accessing the LPT1 parallel port")         ' Obtain a handle to the LPT1 parallel port.         hParallelPort = CreateFile("LPT1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)         ' Verify that the obtained handle is valid.         If hParallelPort.ToInt32 = -1 Then            Throw New CommException("Unable to obtain a handle to the LPT1 port")         End If         ' Retrieve the current control settings.         Success = GetCommState(hParallelPort, MyDCB)         If Success = False Then            Throw New CommException("Unable to retrieve the current control settings")         End If         ' Modify the properties of the retrieved DCB structure as appropriate.         ' WARNING: Make sure to modify the properties according to their supported values.         MyDCB.BaudRate = 9600         MyDCB.ByteSize = 8         MyDCB.Parity = NOPARITY         MyDCB.StopBits = ONESTOPBIT         ' Reconfigure LPT1 based on the properties of the modified DCB structure.         Success = SetCommState(hParallelPort, MyDCB)         If Success = False Then            Throw New CommException("Unable to reconfigure LPT1")         End If         ' Retrieve the current time-out settings.         Success = GetCommTimeouts(hParallelPort, MyCommTimeouts)         If Success = False Then            Throw New CommException("Unable to retrieve current time-out settings")         End If         ' Modify the properties of the retrieved COMMTIMEOUTS structure as appropriate.          ' WARNING: Make sure to modify the properties according to their supported values.         MyCommTimeouts.ReadIntervalTimeout = 0         MyCommTimeouts.ReadTotalTimeoutConstant = 0         MyCommTimeouts.ReadTotalTimeoutMultiplier = 0         MyCommTimeouts.WriteTotalTimeoutConstant = 0         MyCommTimeouts.WriteTotalTimeoutMultiplier = 0         ' Reconfigure the time-out settings, based on the properties of the modified COMMTIMEOUTS structure.         Success = SetCommTimeouts(hParallelPort, MyCommTimeouts)         If Success = False Then            Throw New CommException("Unable to reconfigure the time-out settings")         End If         ' Write data to LPT1.        	' Note: You cannot read data from a parallel port by calling the ReadFile function.         Console.WriteLine("Writing the following data to LPT1: Test")         Success = WriteFile(hParallelPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)         If Success = False Then            Throw New CommException("Unable to write to LPT1")         End If      Catch ex As Exception         Console.WriteLine(Ex.Message)      Finally         ' Release the handle to LPT1.         Success = CloseHandle(hParallelPort)         If Success = False Then            Console.WriteLine("Unable to release handle to LPT1")         End If      End Try      Console.WriteLine("Press ENTER to quit")      Console.ReadLine()
  9. Trên các Xây dựng trình đơn, nhấp vào Xây dựng Giải pháp.
  10. Trên các Gỡ lỗi trình đơn, nhấp vàoBắt đầu để chạy các ứng dụng.

    Bạn có thể nhận được các văn bản sau đây trong bàn điều khiển:
    Khi truy cập COM1 cổng nối tiếp
    Ghi dữ liệu sau vào COM1: thử nghiệm

    Đọc các dữ liệu từ COM1 sau: Dữ liệu nối tiếp
    Truy cập vào Cổng song song LPT1

    Ghi dữ liệu sau vào LPT1: thử nghiệm

    Nhấn ENTER để bỏ thuốc lá
    Chú ý Dữ liệu nối tiếp đại diện cho các dữ liệu mà bạn đọc từ cổng nối tiếp.
  11. Để đóng ứng dụng, nhấn phím ENTER trong các giao diện điều khiển.

Mẫu mã danh sách (Module1.vb)

Trước khi bạn sử dụng ví dụ mã sau, thay thế COM1 với tên của cổng nối tiếp của bạn, và thay thế LPT1 với tên của bạn cổng song song.

Chú ý Các mã sau đây làm việc chỉ khi các thiết bị nối tiếp và song song các thiết bị được kết nối với cổng tương ứng trên máy tính. Nếu bạn không kết nối các thiết bị này và bạn chạy chương trình, chương trình chờ đợi vô thời hạn.
Option Strict On' Define a CommException class that inherits from the ApplicationException class.' Then throw an object of type CommException when you receive an error message.Class CommException   Inherits ApplicationException   Sub New(ByVal Reason As String)      MyBase.New(Reason)   End SubEnd ClassModule Module1      'Declare structures      Public Structure DCB      Public DCBlength As Int32      Public BaudRate As Int32      Public fBitFields As Int32      Public wReserved As Int16      Public XonLim As Int16      Public XoffLim As Int16      Public ByteSize As Byte      Public Parity As Byte      Public StopBits As Byte      Public XonChar As Byte      Public XoffChar As Byte      Public ErrorChar As Byte      Public EofChar As Byte      Public EvtChar As Byte      Public wReserved1 As Int16 'Reserved; Do Not Use   End Structure   Public Structure COMMTIMEOUTS      Public ReadIntervalTimeout As Int32      Public ReadTotalTimeoutMultiplier As Int32      Public ReadTotalTimeoutConstant As Int32      Public WriteTotalTimeoutMultiplier As Int32      Public WriteTotalTimeoutConstant As Int32   End Structure   'Declare constants.   Public Const GENERIC_READ As Int32 = &H80000000   Public Const GENERIC_WRITE As Int32 = &H40000000   Public Const OPEN_EXISTING As Int32 = 3   Public Const FILE_ATTRIBUTE_NORMAL As Int32 = &H80   Public Const NOPARITY As Int32 = 0   Public Const ONESTOPBIT As Int32 = 0   'Declare references to external functions.   Public Declare Auto Function CreateFile Lib "kernel32.dll" _      (ByVal lpFileName As String, ByVal dwDesiredAccess As Int32, _         ByVal dwShareMode As Int32, ByVal lpSecurityAttributes As IntPtr, _            ByVal dwCreationDisposition As Int32, ByVal dwFlagsAndAttributes As Int32, _               ByVal hTemplateFile As IntPtr) As IntPtr   Public Declare Auto Function GetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _      ByRef lpDCB As DCB) As Boolean   Public Declare Auto Function SetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _      ByRef lpDCB As DCB) As Boolean   Public Declare Auto Function GetCommTimeouts Lib "kernel32.dll" (ByVal hFile As IntPtr, _      ByRef lpCommTimeouts As COMMTIMEOUTS) As Boolean   Public Declare Auto Function SetCommTimeouts Lib "kernel32.dll" (ByVal hFile As IntPtr, _      ByRef lpCommTimeouts As COMMTIMEOUTS) As Boolean   Public Declare Auto Function WriteFile Lib "kernel32.dll" (ByVal hFile As IntPtr, _      ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToWrite As Int32, _         ByRef lpNumberOfBytesWritten As Int32, ByVal lpOverlapped As IntPtr) As Boolean   Public Declare Auto Function ReadFile Lib "kernel32.dll" (ByVal hFile As IntPtr, _      ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToRead As Int32, _         ByRef lpNumberOfBytesRead As Int32, ByVal lpOverlapped As IntPtr) As Boolean   Public Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean   Sub Main()      ' Declare local variables that you will use in the code.      Dim hSerialPort, hParallelPort As IntPtr      Dim Success As Boolean      Dim MyDCB As DCB      Dim MyCommTimeouts As COMMTIMEOUTS      Dim BytesWritten, BytesRead As Int32      Dim Buffer() As Byte      ' Declare variables to use for encoding.      Dim oEncoder As New System.Text.ASCIIEncoding      Dim oEnc As System.Text.Encoding = oEncoder.GetEncoding(1252)      ' Convert String to Byte().      Buffer = oEnc.GetBytes("Test")      Try         ' Serial port.         Console.WriteLine("Accessing the COM1 serial port")         ' Obtain a handle to the COM1 serial port.         hSerialPort = CreateFile("COM1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)         ' Verify that the obtained handle is valid.         If hSerialPort.ToInt32 = -1 Then            Throw New CommException("Unable to obtain a handle to the COM1 port")         End If         ' Retrieve the current control settings.         Success = GetCommState(hSerialPort, MyDCB)         If Success = False Then            Throw New CommException("Unable to retrieve the current control settings")         End If         ' Modify the properties of the retrieved DCB structure as appropriate.         ' WARNING: Make sure to modify the properties according to their supported values.         MyDCB.BaudRate = 9600         MyDCB.ByteSize = 8         MyDCB.Parity = NOPARITY         MyDCB.StopBits = ONESTOPBIT         ' Reconfigure COM1 based on the properties of the modified DCB structure.         Success = SetCommState(hSerialPort, MyDCB)         If Success = False Then            Throw New CommException("Unable to reconfigure COM1")         End If         ' Retrieve the current time-out settings.         Success = GetCommTimeouts(hSerialPort, MyCommTimeouts)         If Success = False Then            Throw New CommException("Unable to retrieve current time-out settings")         End If         ' Modify the properties of the retrieved COMMTIMEOUTS structure as appropriate.         ' WARNING: Make sure to modify the properties according to their supported values.         MyCommTimeouts.ReadIntervalTimeout = 0         MyCommTimeouts.ReadTotalTimeoutConstant = 0         MyCommTimeouts.ReadTotalTimeoutMultiplier = 0         MyCommTimeouts.WriteTotalTimeoutConstant = 0         MyCommTimeouts.WriteTotalTimeoutMultiplier = 0         ' Reconfigure the time-out settings, based on the properties of the modified COMMTIMEOUTS structure.         Success = SetCommTimeouts(hSerialPort, MyCommTimeouts)         If Success = False Then            Throw New CommException("Unable to reconfigure the time-out settings")         End If         ' Write data to COM1.         Console.WriteLine("Writing the following data to COM1: Test")         Success = WriteFile(hSerialPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)         If Success = False Then            Throw New CommException("Unable to write to COM1")         End If         ' Read data from COM1.         Success = ReadFile(hSerialPort, Buffer, BytesWritten, BytesRead, IntPtr.Zero)         If Success = False Then            Throw New CommException("Unable to read from COM1")         End If      Catch ex As Exception         Console.WriteLine(Ex.Message)      Finally         ' Release the handle to COM1.         Success = CloseHandle(hSerialPort)         If Success = False Then            Console.WriteLine("Unable to release handle to COM1")         End If      End Try      Try         ' Parallel port.         Console.WriteLine("Accessing the LPT1 parallel port")         ' Obtain a handle to the LPT1 parallel port.         hParallelPort = CreateFile("LPT1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)         ' Verify that the obtained handle is valid.         If hParallelPort.ToInt32 = -1 Then            Throw New CommException("Unable to obtain a handle to the LPT1 port")         End If         ' Retrieve the current control settings.         Success = GetCommState(hParallelPort, MyDCB)         If Success = False Then            Throw New CommException("Unable to retrieve the current control settings")         End If         ' Modify the properties of the retrieved DCB structure as appropriate.         ' WARNING: Make sure to modify the properties according to their supported values.         MyDCB.BaudRate = 9600         MyDCB.ByteSize = 8         MyDCB.Parity = NOPARITY         MyDCB.StopBits = ONESTOPBIT         ' Reconfigure LPT1 based on the properties of MyDCB.         Success = SetCommState(hParallelPort, MyDCB)         If Success = False Then            Throw New CommException("Unable to reconfigure LPT1")         End If         ' Reconfigure LPT1 based on the properties of the modified DCB structure.         Success = GetCommTimeouts(hParallelPort, MyCommTimeouts)         If Success = False Then            Throw New CommException("Unable to retrieve current time-out settings")         End If         ' Modify the properties of the retrieved COMMTIMEOUTS structure as appropriate.         ' WARNING: Make sure to modify the properties according to their supported values.         MyCommTimeouts.ReadIntervalTimeout = 0         MyCommTimeouts.ReadTotalTimeoutConstant = 0         MyCommTimeouts.ReadTotalTimeoutMultiplier = 0         MyCommTimeouts.WriteTotalTimeoutConstant = 0         MyCommTimeouts.WriteTotalTimeoutMultiplier = 0         ' Reconfigure the time-out settings, based on the properties of the modified COMMTIMEOUTS structure.         Success = SetCommTimeouts(hParallelPort, MyCommTimeouts)         If Success = False Then            Throw New CommException("Unable to reconfigure the time-out settings")         End If         ' Write data to LPT1.         ' Note: You cannot read data from a parallel port by calling the ReadFile function.         Console.WriteLine("Writing the following data to LPT1: Test")         Success = WriteFile(hParallelPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)         If Success = False Then            Throw New CommException("Unable to write to LPT1")         End If      Catch ex As Exception         Console.WriteLine(Ex.Message)      Finally         ' Release the handle to LPT1.         Success = CloseHandle(hParallelPort)         If Success = False Then            Console.WriteLine("Unable to release handle to LPT1")         End If      End Try      Console.WriteLine("Press ENTER to quit")      Console.ReadLine()   End SubEnd Module

Gỡ rối

  • Khi bạn chạy các ứng dụng, bạn có thể nhận được dưới đây thông báo lỗi:
    System.NullReferenceException: đối tượng tham chiếu không được đặt để một thể hiện của một đối tượng.
    Bạn có thể nhận được điều này lỗi tin nhắn vì của bạn khai báo chức năng là không chính xác. Lỗi này thư thường xảy ra khi khai báo của bạn chứa ByVal các tham số thay vì ByRef các tham số.
  • Ứng dụng của bạn có thể đợi vô thời hạn khi bạn gọi các ReadFile chức năng. Hành vi này thường xảy ra khi bạn thiết lập các chi Time-outs 0 trong các truy cập COMMTIMEOUTS cấu trúc. Để giải quyết vấn đề này, sửa đổi các thuộc tính của các COMMTIMEOUTS cấu trúc, nếu thích hợp.
THAM KHẢO
Để biết thêm chi tiết, hãy truy cập Microsoft sau đây Các trang Web của nhà phát triển mạng (MSDN): Cho biết thêm thông tin về modem lệnh, nhấp vào số bài viết sau đây để xem các bài viết trong các Cơ sở kiến thức Microsoft:
164660TẠI modem lệnh tham khảo

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 823179 - Xem lại Lần cuối: 12/08/2015 03:18:32 - Bản sửa đổi: 2.0

Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbvs2005swept kbvs2005doesnotapply kbserial kbsdk kbkern32dll kbdll kbcommport kbapi kb32bitonly kbinterop kbconsole kbconfig kbappdev kbprogramming kbsample kbhowtomaster kbmt KB823179 KbMtvi
Phản hồi