首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

vb.net中输出字符到LPT并口,以打印小票,该怎么处理

2012-10-23 
vb.net中输出字符到LPT并口,以打印小票原来在VB6中:OpenLPT1: ForOutputAs#1Print#1,Chr$(27)E Chr(

vb.net中输出字符到LPT并口,以打印小票
原来在VB6中:

  Open "LPT1: " For Output As #1 
  Print #1, Chr$(27); "E "; Chr(&H1B); Chr(&H26); "l "; "1 "; "O " 
  Close #1 

在vb2010里面就不能用open来打开LPT1了,要用什么最简的办法呢?

[解决办法]

VB.NET code
'Open'Write(str)'CloseImports System.Runtime.InteropServicesPublic Class LPT    Inherits MarshalByRefObject#Region "Declare"    <DllImport("kernel32.dll")>    Private Shared Function CreateFile( _                                        ByVal lpFileName As String, _                                        ByVal dwDesiredAccess As Integer, _                                        ByVal dwShareMode As Integer, _                                        ByVal lpSecurityAttributes As Integer, _                                        ByVal dwCreationDisposition As Integer, _                                        ByVal dwFlagsAndAttributes As Integer, _                                        ByVal hTemplateFile As Integer _                                    ) As Integer    End Function    <DllImport("kernel32.dll")>    Private Shared Function ReadFile( _                                    ByVal hFile As Integer, _                                    ByVal Buffer As Byte(), _                                    ByVal nNumberOfBytesToRead As Integer, _                                    ByRef lpNumberOfBytesRead As Integer, _                                    ByRef lpOverlapped As OVERLAPPED _                                    ) As Integer    End Function    <DllImport("kernel32.dll")>    Private Shared Function WriteFile( _                                    ByVal hFile As Integer, _                                    ByVal Buffer As Byte(), _                                    ByVal nNumberOfBytesToWrite As Integer, _                                    ByRef lpNumberOfBytesWritten As Integer, _                                    ByRef lpOverlapped As OVERLAPPED _                                    ) As Integer    End Function    <DllImport("kernel32.dll")>    Private Shared Function CloseHandle(ByVal hObject As Integer) As Integer    End Function    <StructLayout(LayoutKind.Sequential)>    Private Structure OVERLAPPED        Public ternal As Integer        Public ternalHigh As Integer        Public offset As Integer        Public OffsetHigh As Integer        Public hEvent As Integer    End Structure    Private Const OPEN_EXISTING = 3    Private Const GENERIC_READ = &H80000000    Private Const GENERIC_WRITE = &H40000000#End Region#Region "变量"    Private m_portname As String = "LPT1"    Private m_opened As Boolean = False    Private m_handle As Integer = -1#End Region#Region "属性"    Public Property Port() As String        Get            Return m_portname        End Get        Set(ByVal Value As String)            m_portname = Value        End Set    End Property    Public Property IsOpen() As Boolean        Get            Return m_opened        End Get        Set(ByVal Value As Boolean)            m_opened = Value        End Set    End Property#End Region#Region "方法"    Public Sub Open(ByVal Prt As String)        m_handle = CreateFile(Prt, GENERIC_READ + GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0)        If m_handle = -1 Then            Throw New Exception("打开并口失败!")            Return        End If        m_opened = True    End Sub    Public Sub Open()        Open(m_portname)    End Sub    Public Sub Write(ByVal data As Byte)        Dim written As Integer        Dim buffer As Byte()        buffer = Array.CreateInstance(GetType(Byte), 1)        buffer(0) = data        If m_opened Then            WriteFile(m_handle, buffer, 1, written, New OVERLAPPED)        End If    End Sub    Public Sub Write(ByVal sData As String)        Dim bytes() As Byte = System.Text.Encoding.ASCII.GetBytes(sData)        For Each b As Byte In bytes            Write(b)        Next    End Sub    Public Function Read() As Byte        Dim buffer As Byte() = Nothing        Dim rd As Integer = 0        If m_opened = True Then            ReadFile(m_handle, buffer, 1, rd, New OVERLAPPED)        End If        If rd > 0 Then Return buffer(0) Else Return 0    End Function    Public Sub Close()        If m_handle <> -1 Then            CloseHandle(m_handle)            m_handle = -1        End If        m_opened = False    End Sub#End RegionEnd Class 

热点排行