Проблема с устаревшим конструктором Visual Basic Visual Studio 2010 - PullRequest
0 голосов
/ 14 июня 2010

Моя цель состоит в том, чтобы печатать этикетки со штрих-кодами и отметкой даты из записи в зебру TLP 2844, когда пользователь нажимает кнопку «ОК» / нажимает кнопку ввода.я нашел то, что, как мне кажется, может быть кодом для этого на сайте zebras, и интегрировал его в свою программу, но часть его устарела, и я не могу понять, как его обновить.ниже то, что я имею до сих пор.Принтер подключен через USB, и программа также будет хранить введенные номера в базе данных, но я выполнил эту часть.любая помощь будет высоко ценится.

 
Public Class ScanForm
 
   Inherits System.Windows.Forms.Form
   Public Const GENERIC_WRITE = &H40000000
   Public Const OPEN_EXISTING = 3
   Public Const FILE_SHARE_WRITE = &H2
 
   Dim LPTPORT As String
   Dim hPort As Integer
 
   Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String,
                                                                          ByVal dwDesiredAccess As Integer,
                                                                          ByVal dwShareMode As Integer, <MarshalAs(UnmanagedType.Struct)> ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES,
                                                                          ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer,
                                                                          ByVal hTemplateFile As Integer) As Integer
 
 
 
   Public Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Integer) As Integer
 
   Dim retval As Integer
 
 
 
 
  <StructLayout(LayoutKind.Sequential)> Public Structure SECURITY_ATTRIBUTES
 
       Private nLength As Integer
       Private lpSecurityDescriptor As Integer
       Private bInheritHandle As Integer
 
   End Structure
 
 
 
 
   Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
 
       Dim TrNum
       Dim TrDate
       Dim SA As SECURITY_ATTRIBUTES
       Dim outFile As FileStream, hPortP As IntPtr
 
       LPTPORT = "USB001"
       TrNum = Me.ScannedBarcodeText.Text()
       TrDate = Now()
 
       hPort = CreateFile(LPTPORT, GENERIC_WRITE, FILE_SHARE_WRITE, SA, OPEN_EXISTING, 0, 0)
 
       hPortP = New IntPtr(hPort) 'convert Integer to IntPtr
 
       outFile = New FileStream(hPortP, FileAccess.Write) 'Create FileStream using Handle
       Dim fileWriter As New StreamWriter(outFile)
 
       fileWriter.WriteLine(" ")
       fileWriter.WriteLine("N")
       fileWriter.Write("A50,50,0,4,1,1,N,")
       fileWriter.Write(Chr(34))
       fileWriter.Write(TrNum) 'prints the tracking number variable
       fileWriter.Write(Chr(34))
       fileWriter.Write(Chr(13))
       fileWriter.Write(Chr(10))
       fileWriter.Write("A50,100,0,4,1,1,N,")
       fileWriter.Write(Chr(34))
       fileWriter.Write(TrDate) 'prints the date variable
       fileWriter.Write(Chr(34))
       fileWriter.Write(Chr(13))
       fileWriter.Write(Chr(10))
       fileWriter.WriteLine("P1")
       fileWriter.Flush()
       fileWriter.Close()
       outFile.Close()
       retval = CloseHandle(hPort)
 
       'Add entry to database
       Using connection As New SqlClient.SqlConnection("Data Source=MNGD-LABS-APP02;Initial Catalog=ScannedDB;Integrated Security=True;Pooling=False;Encrypt=False"), _
       cmd As New SqlClient.SqlCommand("INSERT INTO [ScannedDBTable] (TrackingNumber, Date) VALUES (@TrackingNumber, @Date)", connection)
           cmd.Parameters.Add("@TrackingNumber", SqlDbType.VarChar, 50).Value = TrNum
           cmd.Parameters.Add("@Date", SqlDbType.DateTime, 8).Value = TrDate
           connection.Open()
           cmd.ExecuteNonQuery()
           connection.Close()
       End Using
 
       'Prepare data for next entry
       ScannedBarcodeText.Clear()
       Me.ScannedBarcodeText.Focus()
 
   End Sub
 

1 Ответ

1 голос
/ 14 июня 2010

Измените hPortP на SafeHandle.

Однако вы должны изменить объявление CreateFile, чтобы вместо него возвращалось SafeHandle. (и взять IntPtr с вместо Integer с) Ваш текущий код не будет работать на x64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...