Reputation: 87
I am currently trying out the VB.NET PrinterSample_Step1, "Hello OPOS for .Net" . I have installed the driver for TM-H6000III using EPSON advanced driver and set it up in the SetUpPOS for OPOS.NET . I am facing issues with these lines:
deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter, strLogicalName)
m_Printer = posExplorer.CreateInstance(deviceInfo)
posExplorer.CreateInstance(deviceInfo) returns nothing.
This is the full code:
Imports Microsoft.PointOfService
Public Class FrameStep1
Inherits System.Windows.Forms.Form
Private m_Printer As Microsoft.PointOfService.PosPrinter = Nothing
#Region " Windows Forms Designer generated code."
Public Sub New()
MyBase.New()
' The InitializeComponent() call is required for windows Forms designer support.
InitializeComponent()
' TODO: Add counstructor code after the InitializeComponent() call.
End Sub
' Rear treatment is carried out in the resource being used.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
' Design variable.
Private components As System.ComponentModel.IContainer
' This method is required for Windows Forms designer support.
'Do not change the method contents inside the source code editor.
' The Forms designer might not be able to load this method if it was changed manually.
Friend WithEvents btnPrint As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.btnPrint = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'btnPrint
'
Me.btnPrint.Location = New System.Drawing.Point(84, 40)
Me.btnPrint.Name = "btnPrint"
Me.btnPrint.Size = New System.Drawing.Size(120, 32)
Me.btnPrint.TabIndex = 0
Me.btnPrint.Text = "Print"
'
'FrameStep1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
Me.ClientSize = New System.Drawing.Size(280, 125)
Me.Controls.Add(Me.btnPrint)
Me.MaximizeBox = False
Me.Name = "FrameStep1"
Me.Text = "Step1 Print ""Hello OPOS for .Net"""
Me.ResumeLayout(False)
End Sub
#End Region
''' <summary>
''' A method "Print" calls some another method.
''' They are method for printing.
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnPrint_Click(ByVal sender As System.Object _
, ByVal e As System.EventArgs) Handles btnPrint.Click
'<<<step1>>> Start
Try
'As using the PrintNormal method, send strings to a printer, and print it
'[vbCrLf] is the standard code for starting a new line.
m_Printer.PrintNormal(PrinterStation.Receipt, "Hello OPOS for .Net" + vbCrLf)
Catch ex As PosControlException
End Try
'<<<step2>>> End
End Sub
''' <summary>
''' When the method "changeButtonStatus" was called,
''' all buttons other than a button "closing" become invalid.
''' </summary>
Private Sub ChangeButtonStatus()
'Disable control.
btnPrint.Enabled = False
End Sub
''' <summary>
''' The processing code required in order to enable to use of service is written here.
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub FrameStep1_Load(ByVal sender As System.Object _
, ByVal e As System.EventArgs) Handles MyBase.Load
'<<<step1>>>--Start
'Use a Logical Device Name which has been set on the SetupPOS.
Dim strLogicalName As String
Dim deviceInfo As DeviceInfo
Dim posExplorer As PosExplorer
strLogicalName = "PosPrinter"
'Create PosExplorer
posExplorer = New PosExplorer
m_Printer = Nothing
Try
deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter, strLogicalName)
m_Printer = posExplorer.CreateInstance(deviceInfo)
Catch ex As Exception
ChangeButtonStatus()
Return
End Try
Try
'Open the device
m_Printer.Open()
'Get the exclusive control right for the opened device.
'Then the device is disable from other application.
m_Printer.Claim(1000)
'Enable the device.
m_Printer.DeviceEnabled = True
Catch ex As PosControlException
ChangeButtonStatus()
End Try
'<<<step1>>>--End
End Sub
''' <summary>
''' When the method "closing" is called,
''' the following code is run.
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub FrameStep1_Closing(ByVal sender As Object _
, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
'<<<step1>>>--Start
If m_Printer Is Nothing Then
Return
End If
Try
'Cancel the device
m_Printer.DeviceEnabled = False
'Release the device exclusive control right.
m_Printer.Release()
Catch ex As Exception
Finally
'Finish using the device.
m_Printer.Close()
End Try
'<<<step1>>>--End
End Sub
End Class
I have tried the answer from I can't get instance of pos printer , but it does not seem to work in Visual Studio 2019.
The form button will be grayed out as there is an exception.
Is there anyway to solve this issue?
Upvotes: 0
Views: 1535
Reputation: 4360
Please make sure you get valid results at the first stage of deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter, strLogicalName)
.
For example, there is this in a Japanese article.
GetDevice の返り値が null ( Nothing )
In addition, please check the following items.
x86
?These are scanner articles, but they cover similar topics.
Why isn't my scanner in the PosExplorer.GetDevices() list?
Why does Honeywell POS4NET fire the same event for two different scanners?
pos explorer is not finding any device connected to the system in C#
Added after receiving the information of the comment:
A complete installation of the Microsoft POS for.NET SDK installs a sample application that you can use to test your device, so why not try it out and see if you can use your printer?
C:\Program Files (x86)\Microsoft Point Of Service\SDK\Samples\Sample Application\TestApp.exe
If you can use the printer in the sample application, there may be some problem in how to make your application.
If you cannot use the printer even with the sample application, there may be a problem with the printer's own hardware settings, hardware connection method, device driver installation, SetupPOS for OPOS.NET settings, etc.
Upvotes: 1