Se si sta sviluppando un programma in Visual Basic 6 , e si vuole essere in grado di accedere alle porte seriali e parallele , è necessario inserire specifici codici di programmazione di Visual Basic nel programma di file " . VB" . È possibile modificare questo file direttamente in ambiente di programmazione Visual Basic , ma il codice per aggiungere l'accesso alle porte seriali e parallele è molto lunga e specifica. Istruzioni
1
doppio clic "NET di Microsoft Visual Studio . " Sull'icona del programma per avviare il programma . Fare clic sul menu "File" , spostare il cursore del mouse sopra l' opzione "Nuovo" e selezionare l'opzione "Progetto" .
2
Clicca l'opzione " Progetti di Visual Basic " sotto la " , Tipi progetto " voce . Selezionare l'opzione "Console Application " sotto i "Modelli" voce .
3 Digitare un nome per l'applicazione nell'apposito spazio e fare clic sul pulsante "OK " per creare il progetto . Il file " Module1.vb " si apre automaticamente
4
Incollare il seguente codice nel file del progetto " Module1.vb " prima della riga di codice che legge " Modulo1 Module" : . < Br
Option > Strict On
'Definire una classe CommException che eredita dalla classe ApplicationException , ' e poi gettare un oggetto di tipo CommException quando si riceve un errore message.Class CommExceptionInherits ApplicationExceptionSub Nuovo ( Motivo di ByVal come stringa ) MyBase.New ( Motivo ) Fine SubEnd Classe
5
Incollare il seguente codice nel file del progetto " Module1.vb " dopo la riga di codice che legge " Modulo1 Module" :
'Dichiara Struttura structures.Public DCBlength DCBPublic Come BaudRate Int32Public Come fBitFields Int32Public come Int32 ' vedere i commenti in Win32API.TxtPublic wReserved Come Int16Public XonLim Come XoffLim Int16Public Come bytesize Int16Public Come BytePublic Parità Come BytePublic StopBits As BytePublic XonChar Come BytePublic XoffChar Come BytePublic ErrorChar Come BytePublic EofChar Come BytePublic EvtChar Come BytePublic wReserved1 Come Int16 ' riservato, non UseEnd Struttura
Public Structure ReadIntervalTimeout COMMTIMEOUTSPublic Come ReadTotalTimeoutMultiplier Int32Public Come Int32Public ReadTotalTimeoutConstant Come WriteTotalTimeoutMultiplier Int32Public Come Int32Public WriteTotalTimeoutConstant Come Int32End Struttura
'Dichiara constants.Public Const GENERIC_READ come Int32 = & H80000000Public Const GENERIC_WRITE come Int32 = & Const H40000000Public OPEN_EXISTING come Int32 = 3Public Const FILE_ATTRIBUTE_NORMAL come Int32 = & H80Public Const NOPARITY come Int32 = 0Public Const ONESTOPBIT come Int32 = 0
'Dichiara riferimenti esterni functions.Public Declare Auto Function CreateFile Lib " kernel32.dll " _ ( lpFileName ByVal As String , ByVal dwDesiredAccess come Int32 , _ByVal dwShareMode come Int32 , lpSecurityAttributes ByVal come IntPtr , dwCreationDisposition _ByVal come Int32 , ByVal dwFlagsAndAttributes come Int32 , _ByVal hTemplateFile come IntPtr ) come IntPtr
Public Declare Auto Function GetCommState Lib " kernel32.dll " ( ByVal NCID come IntPtr , _ByRef lpDCB Come DCB ) come booleano
Public Declare Funzione Auto SetCommState Lib " kernel32.dll " ( ByVal NCID come IntPtr , _ByRef lpDCB Come DCB ) come booleano
Public Declare GetCommTimeouts funzione Auto Lib " kernel32.dll " ( ByVal hFile come IntPtr , _ByRef lpCommTimeouts As COMMTIMEOUTS ) As Boolean
Public Declare SetCommTimeouts funzione Auto Lib " kernel32.dll " ( ByVal hFile come IntPtr , _ByRef lpCommTimeouts As COMMTIMEOUTS ) As Boolean
Public Declare Auto Function WriteFile Lib " kernel32 . dll " ( ByVal hFile come IntPtr , _ByVal lpBuffer As Byte ( ) , ByVal nNumberOfBytesToWrite come Int32 , _ByRef lpNumberOfBytesWritten come Int32 , ByVal lpOverlapped come IntPtr ) come booleano
Public Declare Auto Function ReadFile Lib" kernel32.dll " , ( ByVal hFile come IntPtr , lpBuffer _ByVal As Byte ( ) , ByVal nNumberOfBytesToRead come Int32 , _ByRef lpNumberOfBytesRead come Int32 , ByVal lpOverlapped come IntPtr ) come booleano
Public Declare Function Auto CloseHandle Lib " kernel32.dll " ( ByVal hObject come IntPtr ) come booleano
6
Incollare il seguente codice nel file del progetto " Module1.vb " dopo la riga di codice che legge " Sub Main " :
'Dichiara le variabili locali che verranno utilizzate nel code.Dim hSerialPort , hParallelPort Come IntPtrDim successo Come BooleanDim MyDCB Come DCBDim MyCommTimeouts As COMMTIMEOUTSDim BytesWritten , BytesRead Come Int32Dim Buffer ( ) As Byte
' Dichiara le variabili da utilizzare per encoding.Dim oEncoder As New System.Text.ASCIIEncodingDim oEnc Come System.Text.Encoding = oEncoder.GetEncoding ( 1252 ) per
' Convertire stringa di Byte () . Buffer = oEnc.GetBytes ( "Test" ) Prova ' Accedere al port.Console.WriteLine seriale ( "Accesso alla porta seriale COM1 " )' Ottiene un handle per la seriale COM1 port.hSerialPort = CreateFile ( " COM1 " , GENERIC_READ O GENERIC_WRITE , 0 , IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , IntPtr.Zero ) ' Verificare che la maniglia si ottiene è valid.If hSerialPort.ToInt32 = -1 ThenThrow New CommException ( " Impossibile ottenere un handle per la porta COM1 " ) End If ' recuperare le impostazioni di controllo correnti . successo = GetCommState ( hSerialPort , MyDCB ) se il successo = False ThenThrow New CommException ( " Impossibile recuperare le impostazioni di controllo correnti " ) End If ' Modificare le proprietà della struttura DCB recuperato a seconda dei casi . ' ATTENZIONE : Assicurarsi di modificare le proprietà in base alla loro values.MyDCB.BaudRate supportato = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Riconfigurare COM1 in base alle proprietà del modified DCB structure.Success = SetCommState ( hSerialPort , MyDCB ) se il successo = False ThenThrow New CommException ( "Impossibile riconfigurare COM1" ) End If ' richiamare i time-out settings.Success = GetCommTimeouts ( hSerialPort , MyCommTimeouts ) se il successo = False ThenThrow New CommException ( " Impossibile recuperare attuali impostazioni di time- out ") End If ' modificare le proprietà della struttura COMMTIMEOUTS recuperato a seconda dei casi . ' ATTENZIONE : Assicurarsi di modificare le proprietà in base alla loro values.MyCommTimeouts.ReadIntervalTimeout supportato = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' riconfigurare le impostazioni di timeout , in base alle proprietà del modificata COMMTIMEOUTS structure.Success = SetCommTimeouts ( hSerialPort , MyCommTimeouts ) se il successo = False ThenThrow New CommException ( "Impossibile per riconfigurare le impostazioni di time-out" ) End If ' Scrive i dati nella COM1.Console.WriteLine ( "Scrivere i seguenti dati COM1 : test " ) Successo = WriteFile ( hSerialPort , Buffer , buffer.Length , BytesWritten , IntPtr.Zero ) se il successo = False ThenThrow New CommException ( " Impossibile scrivere COM1 " ) End If ' dati da COM1.Success Leggi = ReadFile ( hSerialPort , Buffer , BytesWritten , BytesRead , IntPtr.Zero ) se il successo = False ThenThrow New CommException ( "Impossibile leggere da COM1 ") End IfCatch ex come ExceptionConsole.WriteLine ( ex.Message ) Infine ' Rilasciare la maniglia a COM1 . Successo = CloseHandle ( hSerialPort ) se il successo = False ThenConsole.WriteLine ( "Impossibile rilasciare gestire a COM1 ") End Try IfEnd
7
Incollare il codice seguente immediatamente dopo il codice è stato inserito nella file " Module1.vb " al punto 6 :
Try ' port.Console.WriteLine parallela ( "Accesso alla porta parallela LPT1 " )' Ottiene un handle per la LPT1 parallela port.hParallelPort = CreateFile ( " , LPT1 " , GENERIC_READ O GENERIC_WRITE , 0 , IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , IntPtr.Zero ) ' Verificare che la maniglia si ottiene è valid.If hParallelPort.ToInt32 = -1 ThenThrow New CommException ( " Impossibile ottenere un handle per la porta LPT1 " ) End If ' Recupera il controllo corrente settings.Success = GetCommState ( hParallelPort , MyDCB ) se il successo = False ThenThrow New CommException ( " Impossibile recuperare le impostazioni di controllo correnti " ) End If ' Modificare le proprietà del recuperato struttura DCB come appropriato ' . ATTENZIONE : Assicurarsi di modificare le proprietà in base alla loro values.MyDCB.BaudRate supportato = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Riconfigurare LPT1 in base alle proprietà del modified DCB structure.Success = SetCommState ( hParallelPort , MyDCB ) se il successo = False ThenThrow New CommException ( "Impossibile riconfigurare LPT1 " ) End If ' richiamare i time-out settings.Success = GetCommTimeouts ( hParallelPort , MyCommTimeouts ) se il successo = False ThenThrow New CommException ( " Impossibile recuperare attuali impostazioni di time- out ") End If ' modificare le proprietà della struttura COMMTIMEOUTS recuperato a seconda dei casi . ' ATTENZIONE : Assicurarsi di modificare le proprietà in base alla loro values.MyCommTimeouts.ReadIntervalTimeout supportato = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' riconfigurare le impostazioni di timeout , in base alle proprietà del modificata COMMTIMEOUTS structure.Success = SetCommTimeouts ( hParallelPort , MyCommTimeouts ) se il successo = False ThenThrow New CommException ( "Impossibile per riconfigurare le impostazioni di time-out" ) End If ' scrivere dati su LPT1 . ' Nota : Non è possibile leggere i dati da una porta parallela chiamando il ReadFile function.Console.WriteLine ( "Scrivere i seguenti dati su LPT1 : Test" ) Successo = WriteFile ( hParallelPort , Buffer , buffer.Length , BytesWritten , IntPtr.Zero ) se il successo = False ThenThrow New CommException ( " Impossibile scrivere su LPT1 ") End IfCatch ex come ExceptionConsole.WriteLine ( ex.Message ) Infine ' Rilasciare la maniglia per LPT1.Success = CloseHandle ( hParallelPort ) se il successo = False ThenConsole . WriteLine ( "Impossibile rilasciare maniglia per LPT1 ") End Try IfEnd
Console.WriteLine (" Premere INVIO per uscire " ) Console.ReadLine ( ) economici 8
Clicca il "Build" del menu e selezionare l' opzione " Genera soluzione " . Fare clic sul menu "Debug" e selezionare l'opzione "Start" . L'applicazione ha ora accesso alle porte seriali e parallele .