開発中の POS アプリケーションに Zebra GK420d ラベル プリンターを使用しています。Zebra が提供する OPOS ドライバーを介してプリンターと通信しようとしています。でも困っちゃう。ボタンが付いた、Visual Basic 2008 のシンプルなフォームです。これが私が実行している完全なコードです。
Public Class FrameStep1 Inherit System.Windows.Forms.Form
Private m_Printer As Microsoft.PointOfService.PosPrinter = Nothing
Private Sub ChangeButtonStatus()
'Disable control.
btnPrint.Enabled = False
End Sub
Private Sub FrameStep1_Load(ByVal sender As System.Object _
, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strLogicalName As String
Dim deviceInfo As DeviceInfo
Dim posExplorer As PosExplorer
strLogicalName = "zebra"
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
m_Printer.Open()
m_Printer.Claim(1000)
m_Printer.DeviceEnabled = True
Catch ex As PosControlException
ChangeButtonStatus()
End Try
End Sub
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
Try
m_Printer.PrintNormal(PrinterStation.Receipt, "Hello OPOS for .Net" + vbCrLf)
Catch ex As PosControlException
End Try
End Sub
Private Sub FrameStep1_Closing(ByVal sender As Object _
, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If m_Printer Is Nothing Then
Return
End If
Try
m_Printer.DeviceEnabled = False
m_Printer.Release()
Catch ex As Exception
Finally
m_Printer.Close()
End Try
End Sub
クラス終了
claim() を呼び出して、DeviceEnabled=true に設定したことがわかります。ただし、デバッグすると、コントロールが m_Printer.Open() を通過すると、魔法のように btnPrint_Click() になり、フォームのボタンをクリックしてから m_Printer.PrintNormal() に移動しない限り、それ以上進みません。中断して POSControlException をスローし、その中のテキストに「メソッドまたはプロパティ セット アクションを使用する前に要求する必要がある専用デバイスにアクセスしようとしました」と表示されます。
私はここで何か間違ったことをしているようですか?