Hvis du utvikler et program ved hjelp av Visual Basic 6 , og du vil være i stand til å få tilgang til de serielle og parallelle porter , må du sette inn spesifike Visual Basic programmering koder i programmets ». VB "-filen . Du kan redigere denne filen direkte i Visual Basic programmering miljø , men koden for å legge tilgang til de serielle og parallelle porter er veldig lang og konkret. Instruksjoner
en
Dobbeltklikk på "Microsoft Visual Studio. NET " program ikonet for å starte programmet . Klikk på "File "-menyen , flytter du musepekeren over "Ny " og velg "Project " alternativet .
2
Klikk på " Visual Basic prosjekter" alternativet under " ; prosjekttyper "overskriften. Klikk på " Console Application " alternativet under "Maler" overskriften .
3
Skriv inn et navn på programmet i det angitte stedet og klikk på "OK" -knappen for å opprette prosjekt . Den " Module1.vb " fil åpnes automatisk
4
Lim inn følgende kode i prosjektets " Module1.vb " filen før linjen med kode som leser " Module Module1 " : .
Option Strict On The
' Definer en CommException klasse som arver fra ApplicationException klassen ", og deretter kaste et objekt av typen CommException når du får en feilmelding message.Class CommExceptionInherits ApplicationExceptionSub New ( ByVal Reason As String ) MyBase.New ( Reason ) Avslutt SubEnd Class
5
Lim inn følgende kode i prosjektets " Module1.vb " filen etter linjen med kode som leser " Module Module1 " : en
' Erklærer structures.Public Structure DCBPublic DCBlength Som Int32Public baudrate Som Int32Public fBitFields Som Int32 ' Se kommentarer i Win32API.TxtPublic wReserved Som Int16Public XonLim Som Int16Public XoffLim Som Int16Public bytestørrelse Som BytePublic Paritet Som BytePublic StopBits Som BytePublic XonChar Som BytePublic XoffChar Som BytePublic ErrorChar Som BytePublic EofChar Som BytePublic EvtChar Som BytePublic wReserved1 Som INT16 ' Reservert ; Ikke UseEnd Struktur
Public Struktur COMMTIMEOUTSPublic ReadIntervalTimeout Som Int32Public ReadTotalTimeoutMultiplier Som Int32Public ReadTotalTimeoutConstant Som Int32Public WriteTotalTimeoutMultiplier Som Int32Public WriteTotalTimeoutConstant Som Int32End Struktur
« Declare constants.Public Konst GENERIC_READ Som Int32 = & H80000000Public Konst GENERIC_WRITE Som Int32 = & H40000000Public Konst OPEN_EXISTING Som Int32 = 3Public Konst FILE_ATTRIBUTE_NORMAL Som Int32 = & H80Public Konst NOPARITY Som Int32 = 0Public Konst ONESTOPBIT Som Int32 = 0
' Erklærer referanser til eksterne functions.Public Erklærer Auto Function CreateFile Lib " kernel32.dll " _ ( ByVal lpFileName As String , ByVal dwDesiredAccess Som Int32 , _ByVal dwShareMode Som Int32 , ByVal lpSecurityAttributes Som IntPtr , _ByVal dwCreationDisposition Som Int32 , ByVal dwFlagsAndAttributes Som Int32 , _ByVal hTemplateFile Som IntPtr ) Som IntPtr
Public Declare Auto Function GetCommState Lib " kernel32.dll " ( ByVal nCid Som IntPtr , _ByRef lpDCB Som DCB ) Som Boolean
Public Declare Auto Function SetCommState Lib " kernel32.dll " ( ByVal nCid Som IntPtr , _ByRef lpDCB Som DCB ) Som Boolean
Public Declare Auto-funksjonen GetCommTimeouts Lib " KERNEL32.DLL " ( ByVal hFile Som IntPtr , _ByRef lpCommTimeouts As COMMTIMEOUTS ) Som Boolean
Public Declare Auto-funksjonen SetCommTimeouts Lib " KERNEL32.DLL " ( ByVal hFile Som IntPtr , _ByRef lpCommTimeouts Som COMMTIMEOUTS ) Som Boolean
Public Declare Auto Function WriteFile Lib " kernel32 . dll " ( ByVal hFile Som IntPtr , _ByVal lpBuffer Som Byte ( ) , ByVal nNumberOfBytesToWrite Som Int32 , _ByRef lpNumberOfBytesWritten Som Int32 , ByVal lpOverlapped Som IntPtr ) Som Boolean
Public Declare Auto Function ReadFile Lib " kernel32.dll " ; ( ByVal hFile Som IntPtr , _ByVal lpBuffer Som Byte ( ) , ByVal nNumberOfBytesToRead Som Int32 , _ByRef lpNumberOfBytesRead Som Int32 , ByVal lpOverlapped Som IntPtr ) Som Boolean
Public Declare Auto Function CloseHandle Lib " kernel32.dll " ( ByVal hObject som IntPtr ) som Boolean
6
Lim inn følgende kode i prosjektets " Module1.vb " filen etter linjen med kode som leser " Sub Main" : en
' Erklærer de lokale variabler som du vil bruke i code.Dim hSerialPort , hParallelPort som IntPtrDim suksess Som BooleanDim MyDCB som DCBDim MyCommTimeouts som COMMTIMEOUTSDim BytesWritten , BytesRead som Int32Dim Buffer ( ) som Byte
' Erklærer variablene å bruke for encoding.Dim oEncoder som ny System.Text.ASCIIEncodingDim oEnc Som System.Text.Encoding = oEncoder.GetEncoding ( 1252 )
"Konverter String til Byte ( ) . Buffer = oEnc.GetBytes ( " Test " ) Prøv ' Åpne serielle port.Console.WriteLine ( "Tilgang til COM1 seriell port ")' Skaffe et håndtak til COM1 seriell port.hSerialPort = CreateFile ( " COM1 " , GENERIC_READ Eller GENERIC_WRITE , 0 , IntPtr.Zero , _OPEN_EXISTING , ) FILE_ATTRIBUTE_NORMAL , IntPtr.Zero ' Kontroller at innhentet håndtaket er valid.If hSerialPort.ToInt32 = -1 ThenThrow New CommException ("Kan ikke få et håndtak til COM1 -porten ") End If ' Hent gjeldende innstillingene . suksess = GetCommState ( hSerialPort , MyDCB ) Hvis suksess = False ThenThrow New CommException ( "Kan ikke hente de gjeldende innstillingene ") End If 'Endre egenskapene til den hentes DCB struktur som passer. ' ADVARSEL : Sørg for å endre egenskapene i henhold til deres støttet values.MyDCB.BaudRate = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Konfigurer COM1 basert på egenskapene til den modifiserte DCB structure.Success = SetCommState ( hSerialPort , MyDCB ) Hvis Suksess = False ThenThrow New CommException ("Kan ikke konfigurere COM1 ") End If ' Hent gjeldende time- out settings.Success = GetCommTimeouts ( hSerialPort , MyCommTimeouts ) Hvis Suksess = False ThenThrow New CommException ( "Kan ikke hente gjeldende time- out innstillinger ") End If 'Endre egenskapene til den hentes COMMTIMEOUTS struktur som passer. ' ADVARSEL : Sørg for å endre egenskapene i henhold til deres støttet values.MyCommTimeouts.ReadIntervalTimeout = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Konfigurer Time-out innstillinger , basert på egenskapene til den modifiserte COMMTIMEOUTS structure.Success = SetCommTimeouts ( hSerialPort , MyCommTimeouts ) Hvis Suksess = False ThenThrow New CommException ("Kan ikke konfigurere tidsavbrudd ") End If ' Skriv data til COM1.Console.WriteLine ( "Writing følgende data til COM1 : Test " ) Suksess = WriteFile ( hSerialPort , Buffer , Buffer.Length , BytesWritten , IntPtr.Zero ) Hvis Suksess = False ThenThrow New CommException (" Kan ikke skrive til COM1 ") End If ' Les data fra COM1.Success = ReadFile ( hSerialPort , Buffer , BytesWritten , BytesRead , IntPtr.Zero ) Hvis Suksess = False ThenThrow New CommException ("Kan ikke lese fra COM1 ") End IfCatch ex Som ExceptionConsole.WriteLine ( Ex.Message ) Endelig ' Slipp håndtaket til COM1 . Suksess = CloseHandle ( hSerialPort ) Hvis Suksess = False ThenConsole.WriteLine ("Kan ikke slippe håndtaket til COM1 ") End IfEnd Prøv
7
Lim inn følgende kode rett etter koden du satt inn i " Module1.vb "-filen i Trinn 6 : en
Prøv ' Parallel port.Console.WriteLine ( "Tilgang til LPT1 parallell port ")' Skaffe et håndtak til LPT1 parallell port.hParallelPort = CreateFile ( " ; LPT1 " , GENERIC_READ Eller GENERIC_WRITE , 0 , IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , ) IntPtr.Zero ' Kontroller at innhentet håndtaket er valid.If hParallelPort.ToInt32 = -1 ThenThrow New CommException (" Kan ikke få et håndtak for å LPT1-porten ") End If ' Hent gjeldende kontroll settings.Success = GetCommState ( hParallelPort , MyDCB ) Hvis Suksess = False ThenThrow New CommException ( " Kan ikke hente de gjeldende innstillingene ") End If ' Endre egenskapene til hentes DCB struktur som passer. ' ADVARSEL : Sørg for å endre egenskapene i henhold til deres støttet values.MyDCB.BaudRate = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Konfigurer LPT1 basert på egenskapene til den modifiserte DCB structure.Success = SetCommState ( hParallelPort , MyDCB ) Hvis Suksess = False ThenThrow New CommException ("Kan ikke konfigurere LPT1 ") End If ' Hent gjeldende time- out settings.Success = GetCommTimeouts ( hParallelPort , MyCommTimeouts ) Hvis Suksess = False ThenThrow New CommException ( "Kan ikke hente gjeldende time- out innstillinger ") End If 'Endre egenskapene til den hentes COMMTIMEOUTS struktur som passer. ' ADVARSEL : Sørg for å endre egenskapene i henhold til deres støttet values.MyCommTimeouts.ReadIntervalTimeout = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Konfigurer Time-out innstillinger , basert på egenskapene til den modifiserte COMMTIMEOUTS structure.Success = SetCommTimeouts ( hParallelPort , MyCommTimeouts ) Hvis Suksess = False ThenThrow New CommException ("Kan ikke konfigurere tidsavbrudd ") End If ' Skriv data til LPT1 . 'Merk: Du kan ikke lese data fra en parallell port ved å ringe ReadFile function.Console.WriteLine ( "Writing følgende data til LPT1 : Test ") Suksess = WriteFile ( hParallelPort , Buffer , Buffer.Length , BytesWritten , IntPtr.Zero ) Hvis Suksess = False ThenThrow New CommException ("Kan ikke skrive til LPT1 ") End IfCatch ex Som ExceptionConsole.WriteLine ( Ex.Message ) Endelig ' Slipp håndtaket til LPT1.Success = CloseHandle ( hParallelPort ) Hvis Suksess = False ThenConsole . WriteLine ("Kan ikke slippe håndtaket til LPT1 ") End IfEnd Prøv
Console.WriteLine ( "Press ENTER for å avslutte ") Console.ReadLine ( )
8
Klikk på "Build "-menyen og velg " Build Solution " alternativet . Klikk på " Debug "-menyen og velg "Start "-alternativet. Søknaden har nå tilgang til de serielle og parallelle porter .