Om du utvecklar ett program med hjälp av Visual Basic 6 , och du vill kunna komma åt de seriella och parallella portar , måste du infoga särskilda Visual Basic-programmering koder i programmets " . VB " filen . Du kan redigera den här filen direkt i Visual Basic -programmering miljö , men koden för att lägga till åtkomst till de seriella och parallella portar är mycket lång och specifik . Instruktioner
1
Dubbelklicka på " Microsoft Visual Studio . NET " programikonen för att starta programmet . Klicka på " Arkiv " -menyn , flytta muspekaren över " Ny" och välj " Project " alternativet .
2
Klicka på " Visual Basic-projekt " alternativet under " , Project Types " rubrik . Klicka på " Console Application " alternativet under de " mallar" rubriken .
3
Skriv ett namn på programmet i rutan och klicka på " OK " -knappen för att skapa projektet. Den " Module1.vb " filen öppnas automatiskt
4
Klistra in följande kod i projektets " Module1.vb " filen innan kodrad som läser " Modul Module1 " : .
Option Strict On
'Definiera en CommException klass som ärver från ApplicationException klassen , " och sedan kasta ett objekt av typen CommException när du får ett felmeddelande message.Class CommExceptionInherits ApplicationExceptionSub New ( ByVal Anledning As String ) MyBase.New ( Reason ) Avsluta SubEnd klass
5
Klistra in följande kod i projektets " Module1.vb " filen efter kodrad som läser " modul Module1 " :
"fastställa structures.Public Struktur DCBPublic DCBlength Som Int32Public baudrate Som Int32Public fBitFields Som Int32 ' Se Kommentarer i Win32API.TxtPublic wReserved Som Int16Public XonLim Som Int16Public XoffLim Som Int16Public ByteSize Som BytePublic Paritet Som BytePublic stoppbitar As BytePublic XonChar Som BytePublic XoffChar Som BytePublic ErrorChar Som BytePublic EofChar Som BytePublic EvtChar Som BytePublic wReserved1 Som Int16 ' Reserverad , inte UseEnd Struktur
Public Struktur COMMTIMEOUTSPublic ReadIntervalTimeout Som Int32Public ReadTotalTimeoutMultiplier Som Int32Public ReadTotalTimeoutConstant Som Int32Public WriteTotalTimeoutMultiplier Som Int32Public WriteTotalTimeoutConstant Som Int32End Struktur
' Deklarera constants.Public Const GENERIC_READ Som Int32 = & H80000000Public Const GENERIC_WRITE Som Int32 = & H40000000Public Const OPEN_EXISTING Som Int32 = 3Public Const FILE_ATTRIBUTE_NORMAL Som Int32 = & H80Public Const NOPARITY Som Int32 = 0Public Const ONESTOPBIT Som Int32 = 0
' Deklarera referenser till externa functions.Public Deklarera funktionen Automatisk 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 ) Såsom IntPtr
Public Declare autofunktionen GetCommState Lib " kernel32.dll " ( ByVal RKP Som IntPtr , _ByRef lpDCB Som DCB) As Boolean
Public Deklarera Auto Function SetCommState Lib " kernel32.dll " ( ByVal RKP Som IntPtr , _ByRef lpDCB Som DCB ) As Boolean
Public Declare GetCommTimeouts autofunktion Lib " kernel32.dll " ( ByVal hFile Som IntPtr , _ByRef lpCommTimeouts As COMMTIMEOUTS ) As Boolean
Public Declare SetCommTimeouts autofunktion Lib " kernel32.dll " ( ByVal hFile Som IntPtr , _ByRef lpCommTimeouts As COMMTIMEOUTS ) As 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 ) As 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 ) As Boolean
Public Declare Auto Function CloseHandle Lib " kernel32.dll " ( ByVal hObject som IntPtr ) As Boolean
6
Klistra in följande kod i projektets " Module1.vb " filen efter kodrad som läser " Sub Main" :
' deklarera de lokala variabler som du ska använda i code.Dim hSerialPort , hParallelPort som IntPtrDim framgång Som BooleanDim MyDCB som DCBDim MyCommTimeouts As COMMTIMEOUTSDim BytesWritten , BytesRead som Int32Dim Buffer ( ) som byte
' deklarera variabler att använda för encoding.Dim oEncoder som New System.Text.ASCIIEncodingDim oEnc som System.Text.Encoding = oEncoder.GetEncoding ( 1252 ) katalog
" Konvertera String till byte ( ) . Buffer = oEnc.GetBytes ( " Test " ) Prova " Gå till seriella port.Console.WriteLine ( " Öppna COM1 serieport " ) 'Erhåll ett handtag till COM1 serial port.hSerialPort = CreateFile ( " COM1 " , GENERIC_READ Eller GENERIC_WRITE , 0 , IntPtr.Zero , _OPEN_EXISTING , ) FILE_ATTRIBUTE_NORMAL , IntPtr.Zero "Verifiera att den erhållna handtaget är valid.If hSerialPort.ToInt32 = -1 ThenThrow New CommException ( " Kunde inte få ett handtag till COM1 -porten " ) End If ' Hämta de nuvarande kontrollsystemen inställningarna . framgång = GetCommState ( hSerialPort , MyDCB ) Om Success = False ThenThrow New CommException ( " Kunde inte hämta de nuvarande kontrollsystemen inställningar " ) End If ' Modifiera egenskaperna för den hämtade DCB struktur som är lämpligt . " VARNING : Se till att modifiera egenskaperna enligt deras stöd values.MyDCB.BaudRate = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Konfigurera COM1 baseras på egenskaperna hos den modifierade DCB structure.Success = SetCommState ( hSerialPort , MyDCB ) Om Success = False ThenThrow New CommException ( " Kunde inte konfigurera COM1 " ) End If ' hämta aktuell tid - out settings.Success = GetCommTimeouts ( hSerialPort , MyCommTimeouts ) Om Success = False ThenThrow New CommException ( " Kunde inte hämta aktuella inställningar för timeout " ) End If ' Modifiera egenskaperna för den hämtade COMMTIMEOUTS struktur som är lämpligt . " VARNING : Se till att modifiera egenskaperna enligt deras stöd values.MyCommTimeouts.ReadIntervalTimeout = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Konfigurera timeout- inställningar , baserade på egenskaperna hos den modifierade COMMTIMEOUTS structure.Success = SetCommTimeouts ( hSerialPort , MyCommTimeouts ) Om Success = False ThenThrow New CommException ( " Kunde inte konfigurera timeout- inställningar " ) End If ' Skriv data till COM1.Console.WriteLine ( " Skriva följande uppgifter till COM1 : Test " ) Framgång = WriteFile ( hSerialPort , buffert , Buffer.Length , BytesWritten , IntPtr.Zero ) Om Success = False ThenThrow New CommException ( " Kunde inte skriva till COM1 " ) End If ' Läs data från COM1.Success = ReadFile ( hSerialPort , buffert , BytesWritten , BytesRead , IntPtr.Zero ) Om Framgång = False ThenThrow New CommException ( " Kunde inte läsa från COM1 " ) End IfCatch ex som ExceptionConsole.WriteLine ( Ex.Message ) Slutligen ' Släpp handtaget till COM1 . Framgång = CloseHandle ( hSerialPort ) Om Success = False ThenConsole.WriteLine ( " Kunde inte släppa handtaget till COM1 " ) End IfEnd Prova
7
Klistra in följande kod direkt efter den kod du in i " Module1.vb " filen i Steg 6 :
Prova " parallell port.Console.WriteLine ( " Öppna LPT1-parallellporten " ) 'Erhåll ett handtag till LPT1 parallella port.hParallelPort = CreateFile ( " , LPT1 " , GENERIC_READ Eller GENERIC_WRITE , 0 , IntPtr.Zero , _OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , ) IntPtr.Zero " Verifiera att den erhållna handtaget är valid.If hParallelPort.ToInt32 = -1 ThenThrow New CommException ( " Kunde inte få ett handtag till på porten LPT1 " ) End If ' hämta den aktuella kontrollen settings.Success = GetCommState ( hParallelPort , MyDCB ) Om Success = False ThenThrow New CommException ( " Kunde inte hämta de nuvarande kontrollsystemen inställningar " ) End If ' Ändra egenskaperna för den hämtade DCB struktur som är lämpligt . " VARNING : Se till att modifiera egenskaperna enligt deras stöd values.MyDCB.BaudRate = 9600MyDCB.ByteSize = 8MyDCB.Parity = NOPARITYMyDCB.StopBits = ONESTOPBIT ' Konfigurera LPT1 baseras på egenskaperna hos den modifierade DCB structure.Success = SetCommState ( hParallelPort , MyDCB ) Om Success = False ThenThrow New CommException ( " Kunde inte konfigurera LPT1 " ) End If ' hämta aktuell tid - out settings.Success = GetCommTimeouts ( hParallelPort , MyCommTimeouts ) Om Success = False ThenThrow New CommException ( " Kunde inte hämta aktuella inställningar för timeout " ) End If ' Modifiera egenskaperna för den hämtade COMMTIMEOUTS struktur som är lämpligt . " VARNING : Se till att modifiera egenskaperna enligt deras stöd values.MyCommTimeouts.ReadIntervalTimeout = 0MyCommTimeouts.ReadTotalTimeoutConstant = 0MyCommTimeouts.ReadTotalTimeoutMultiplier = 0MyCommTimeouts.WriteTotalTimeoutConstant = 0MyCommTimeouts.WriteTotalTimeoutMultiplier = 0 ' Konfigurera timeout- inställningar , baserade på egenskaperna hos den modifierade COMMTIMEOUTS structure.Success = SetCommTimeouts ( hParallelPort , MyCommTimeouts ) Om Success = False ThenThrow New CommException ( " Kunde inte konfigurera timeout- inställningar " ) End If ' Skriv data till LPT1 . "Anmärkning : Du kan inte läsa data från en parallellport genom att anropa ReadFile function.Console.WriteLine ( " Skriva följande data till LPT1 : Test " ) Framgång = WriteFile ( hParallelPort , Buffert , Buffer.Length , BytesWritten , IntPtr.Zero ) Om Framgång = False ThenThrow New CommException ( " Kunde inte skriva till LPT1 " ) End IfCatch ex som ExceptionConsole.WriteLine ( Ex.Message ) Slutligen ' Släpp handtaget för att LPT1.Success = CloseHandle ( hParallelPort ) Om Framgång = False ThenConsole . WriteLine ( " Kunde inte släppa handtaget till LPT1 " ) End IfEnd Prova
Console.WriteLine ( " Tryck på ENTER för att avsluta " ) Console.ReadLine ( )
8
Klicka på " Build " -menyn och välj " Build Solution " alternativet . Klicka på " Debug " -menyn och välj "Start " alternativet . Ansökan har nu tillgång till de seriella och parallella portar .