Sending raw text to printer via usb










-1















I am trying to send ZPL commands to a Zebra ZT230 printer. The printer and drivers are installed and the printer port is "USB003". The PC communicates perfectly with the printer via either Zebra Printer Setup Utilities or ZebraDesign. I tried the following code:



Private Declare Function CreateFile Lib "kernel32.dll" (ByVal lpFileName As String, ByVal dwDesiredAccess As FileAccess, _
ByVal dwShareMode As UInteger, ByVal lpSecurityAttributes As IntPtr, ByVal dwCreationDisposition As FileMode, _
ByVal dwFlagsAndAttributes As UInteger, ByVal hTemplateFile As IntPtr) As System.Runtime.InteropServices.SafeHandle

' Command to be sent to the printer
Dim command As String = "^XA^FO10,10,^AO,30,20^FDFDTesting^FS^FO10,30^BY3^BCN,100,Y,N,N^FDTesting^FS^XZ"
' Create a buffer with the command
Dim buffer() As Byte = New Byte((command.Length) - 1)
buffer = System.Text.Encoding.ASCII.GetBytes(command)
' Use the CreateFile external func to connect to the LPT1 port
Dim printer As System.Runtime.InteropServices.SafeHandle = CreateFile("USB003:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero)
' Aqui verifico se a impressora � v�lida
If (printer.IsInvalid = true) Then
Return
End If

' Open the filestream to the lpt1 port and send the command
Dim lpt1 As FileStream = New FileStream(printer, FileAccess.ReadWrite)
lpt1.Write(buffer, 0, buffer.Length)
' Close the FileStream connection
lpt1.Close


I get an error on this line:
Dim printer As System.Runtime.InteropServices.SafeHandle = CreateFile("USB003:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero)



The error message and stack trace is:



Cannot marshal 'return value': Returned SafeHandles cannot be abstract.



at PerfectPotatoInventory.vb.PotatoGlobals.CreateFile(String& lpFileName, FileAccess dwDesiredAccess, UInt32 dwShareMode, IntPtr lpSecurityAttributes, FileMode dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile)
at PerfectPotatoInventory.vb.PotatoGlobals.PrintLabelsTest() in C:PotatoesPerfectPotatoInventory.vbPerfectPotatoInventory.vbPotatoGlobals.vb:line 798



I am working in VB.net using VS2008 with target x86 and .Net 3.5.



Please advise what I am doing wrong.










share|improve this question






















  • See the example for SafeFileHandle Class.

    – TnTinMn
    Nov 16 '18 at 4:03















-1















I am trying to send ZPL commands to a Zebra ZT230 printer. The printer and drivers are installed and the printer port is "USB003". The PC communicates perfectly with the printer via either Zebra Printer Setup Utilities or ZebraDesign. I tried the following code:



Private Declare Function CreateFile Lib "kernel32.dll" (ByVal lpFileName As String, ByVal dwDesiredAccess As FileAccess, _
ByVal dwShareMode As UInteger, ByVal lpSecurityAttributes As IntPtr, ByVal dwCreationDisposition As FileMode, _
ByVal dwFlagsAndAttributes As UInteger, ByVal hTemplateFile As IntPtr) As System.Runtime.InteropServices.SafeHandle

' Command to be sent to the printer
Dim command As String = "^XA^FO10,10,^AO,30,20^FDFDTesting^FS^FO10,30^BY3^BCN,100,Y,N,N^FDTesting^FS^XZ"
' Create a buffer with the command
Dim buffer() As Byte = New Byte((command.Length) - 1)
buffer = System.Text.Encoding.ASCII.GetBytes(command)
' Use the CreateFile external func to connect to the LPT1 port
Dim printer As System.Runtime.InteropServices.SafeHandle = CreateFile("USB003:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero)
' Aqui verifico se a impressora � v�lida
If (printer.IsInvalid = true) Then
Return
End If

' Open the filestream to the lpt1 port and send the command
Dim lpt1 As FileStream = New FileStream(printer, FileAccess.ReadWrite)
lpt1.Write(buffer, 0, buffer.Length)
' Close the FileStream connection
lpt1.Close


I get an error on this line:
Dim printer As System.Runtime.InteropServices.SafeHandle = CreateFile("USB003:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero)



The error message and stack trace is:



Cannot marshal 'return value': Returned SafeHandles cannot be abstract.



at PerfectPotatoInventory.vb.PotatoGlobals.CreateFile(String& lpFileName, FileAccess dwDesiredAccess, UInt32 dwShareMode, IntPtr lpSecurityAttributes, FileMode dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile)
at PerfectPotatoInventory.vb.PotatoGlobals.PrintLabelsTest() in C:PotatoesPerfectPotatoInventory.vbPerfectPotatoInventory.vbPotatoGlobals.vb:line 798



I am working in VB.net using VS2008 with target x86 and .Net 3.5.



Please advise what I am doing wrong.










share|improve this question






















  • See the example for SafeFileHandle Class.

    – TnTinMn
    Nov 16 '18 at 4:03













-1












-1








-1








I am trying to send ZPL commands to a Zebra ZT230 printer. The printer and drivers are installed and the printer port is "USB003". The PC communicates perfectly with the printer via either Zebra Printer Setup Utilities or ZebraDesign. I tried the following code:



Private Declare Function CreateFile Lib "kernel32.dll" (ByVal lpFileName As String, ByVal dwDesiredAccess As FileAccess, _
ByVal dwShareMode As UInteger, ByVal lpSecurityAttributes As IntPtr, ByVal dwCreationDisposition As FileMode, _
ByVal dwFlagsAndAttributes As UInteger, ByVal hTemplateFile As IntPtr) As System.Runtime.InteropServices.SafeHandle

' Command to be sent to the printer
Dim command As String = "^XA^FO10,10,^AO,30,20^FDFDTesting^FS^FO10,30^BY3^BCN,100,Y,N,N^FDTesting^FS^XZ"
' Create a buffer with the command
Dim buffer() As Byte = New Byte((command.Length) - 1)
buffer = System.Text.Encoding.ASCII.GetBytes(command)
' Use the CreateFile external func to connect to the LPT1 port
Dim printer As System.Runtime.InteropServices.SafeHandle = CreateFile("USB003:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero)
' Aqui verifico se a impressora � v�lida
If (printer.IsInvalid = true) Then
Return
End If

' Open the filestream to the lpt1 port and send the command
Dim lpt1 As FileStream = New FileStream(printer, FileAccess.ReadWrite)
lpt1.Write(buffer, 0, buffer.Length)
' Close the FileStream connection
lpt1.Close


I get an error on this line:
Dim printer As System.Runtime.InteropServices.SafeHandle = CreateFile("USB003:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero)



The error message and stack trace is:



Cannot marshal 'return value': Returned SafeHandles cannot be abstract.



at PerfectPotatoInventory.vb.PotatoGlobals.CreateFile(String& lpFileName, FileAccess dwDesiredAccess, UInt32 dwShareMode, IntPtr lpSecurityAttributes, FileMode dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile)
at PerfectPotatoInventory.vb.PotatoGlobals.PrintLabelsTest() in C:PotatoesPerfectPotatoInventory.vbPerfectPotatoInventory.vbPotatoGlobals.vb:line 798



I am working in VB.net using VS2008 with target x86 and .Net 3.5.



Please advise what I am doing wrong.










share|improve this question














I am trying to send ZPL commands to a Zebra ZT230 printer. The printer and drivers are installed and the printer port is "USB003". The PC communicates perfectly with the printer via either Zebra Printer Setup Utilities or ZebraDesign. I tried the following code:



Private Declare Function CreateFile Lib "kernel32.dll" (ByVal lpFileName As String, ByVal dwDesiredAccess As FileAccess, _
ByVal dwShareMode As UInteger, ByVal lpSecurityAttributes As IntPtr, ByVal dwCreationDisposition As FileMode, _
ByVal dwFlagsAndAttributes As UInteger, ByVal hTemplateFile As IntPtr) As System.Runtime.InteropServices.SafeHandle

' Command to be sent to the printer
Dim command As String = "^XA^FO10,10,^AO,30,20^FDFDTesting^FS^FO10,30^BY3^BCN,100,Y,N,N^FDTesting^FS^XZ"
' Create a buffer with the command
Dim buffer() As Byte = New Byte((command.Length) - 1)
buffer = System.Text.Encoding.ASCII.GetBytes(command)
' Use the CreateFile external func to connect to the LPT1 port
Dim printer As System.Runtime.InteropServices.SafeHandle = CreateFile("USB003:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero)
' Aqui verifico se a impressora � v�lida
If (printer.IsInvalid = true) Then
Return
End If

' Open the filestream to the lpt1 port and send the command
Dim lpt1 As FileStream = New FileStream(printer, FileAccess.ReadWrite)
lpt1.Write(buffer, 0, buffer.Length)
' Close the FileStream connection
lpt1.Close


I get an error on this line:
Dim printer As System.Runtime.InteropServices.SafeHandle = CreateFile("USB003:", FileAccess.ReadWrite, 0, IntPtr.Zero, FileMode.Open, 0, IntPtr.Zero)



The error message and stack trace is:



Cannot marshal 'return value': Returned SafeHandles cannot be abstract.



at PerfectPotatoInventory.vb.PotatoGlobals.CreateFile(String& lpFileName, FileAccess dwDesiredAccess, UInt32 dwShareMode, IntPtr lpSecurityAttributes, FileMode dwCreationDisposition, UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile)
at PerfectPotatoInventory.vb.PotatoGlobals.PrintLabelsTest() in C:PotatoesPerfectPotatoInventory.vbPerfectPotatoInventory.vbPotatoGlobals.vb:line 798



I am working in VB.net using VS2008 with target x86 and .Net 3.5.



Please advise what I am doing wrong.







vb.net usb zebra-printers zpl safehandle






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 16 '18 at 3:10









John LeeJohn Lee

92113




92113












  • See the example for SafeFileHandle Class.

    – TnTinMn
    Nov 16 '18 at 4:03

















  • See the example for SafeFileHandle Class.

    – TnTinMn
    Nov 16 '18 at 4:03
















See the example for SafeFileHandle Class.

– TnTinMn
Nov 16 '18 at 4:03





See the example for SafeFileHandle Class.

– TnTinMn
Nov 16 '18 at 4:03












2 Answers
2






active

oldest

votes


















1














Add this class to your project



Imports System.IO
Imports System.Drawing.Printing
Imports System.Runtime.InteropServices
Public Class RAWPOSPrinter
' Structure and API declarions:
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Structure DOCINFOW
<MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String
<MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String
<MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String
End Structure

<DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
End Function

' SendBytesToPrinter()
' When the function is given a printer name and an unmanaged array of
' bytes, the function sends those bytes to the print queue.
' Returns True on success or False on failure.
Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
Dim hPrinter As IntPtr ' The printer handle.
Dim dwError As Int32 ' Last error - in case there was trouble.
Dim di As DOCINFOW ' Describes your document (name, port, data type).
Dim dwWritten As Int32 ' The number of bytes written by WritePrinter().
Dim bSuccess As Boolean ' Your success code.

' Set up the DOCINFO structure.
di = New DOCINFOW
With di
.pDocName = "RAW DOC"
.pDataType = "RAW"
End With
' Assume failure unless you specifically succeed.
bSuccess = False
If OpenPrinter(szPrinterName, hPrinter, 0) Then
If StartDocPrinter(hPrinter, 1, di) Then
If StartPagePrinter(hPrinter) Then
' Write your printer-specific bytes to the printer.
bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
EndPagePrinter(hPrinter)
End If
EndDocPrinter(hPrinter)
End If
ClosePrinter(hPrinter)
End If
' If you did not succeed, GetLastError may give more information
' about why not.
If bSuccess = False Then
dwError = Marshal.GetLastWin32Error()
End If
Return bSuccess
End Function ' SendBytesToPrinter()

' SendFileToPrinter()
' When the function is given a file name and a printer name,
' the function reads the contents of the file and sends the
' contents to the printer.
' Presumes that the file contains printer-ready data.
' Shows how to use the SendBytesToPrinter function.
' Returns True on success or False on failure.
Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
' Open the file.
Dim fs As New FileStream(szFileName, FileMode.Open)
' Create a BinaryReader on the file.
Dim br As New BinaryReader(fs)
' Dim an array of bytes large enough to hold the file's contents.
Dim bytes(fs.Length) As Byte
Dim bSuccess As Boolean
' Your unmanaged pointer.
Dim pUnmanagedBytes As IntPtr

' Read the contents of the file into the array.
bytes = br.ReadBytes(fs.Length)
' Allocate some unmanaged memory for those bytes.
pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)
' Copy the managed byte array into the unmanaged array.
Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)
' Send the unmanaged bytes to the printer.
bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)
' Free the unmanaged memory that you allocated earlier.
Marshal.FreeCoTaskMem(pUnmanagedBytes)
Return bSuccess
End Function ' SendFileToPrinter()

' When the function is given a string and a printer name,
' the function sends the string to the printer as raw bytes.
Public Shared Sub SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)
Dim pBytes As IntPtr
Dim dwCount As Int32
' How many characters are in the string?
dwCount = szString.Length()
' Assume that the printer is expecting ANSI text, and then convert
' the string to ANSI text.
pBytes = Marshal.StringToCoTaskMemAnsi(szString)
' Send the converted ANSI string to the printer.
SendBytesToPrinter(szPrinterName, pBytes, dwCount)
Marshal.FreeCoTaskMem(pBytes)
End Sub
End Class


Then in your code, call the following:



RAWPOSPrinter.SendStringToPrinter("<NAME OF PRINTER AS IT APPEARS IN DEVICES AND PRINTERS>", "<YOUR ZEBRA COMMAND STRING>")





share|improve this answer






























    0














    Using the Zebra .Net SDK you can call the following function:
    PrinterUtil.SendContents Method (String, String)



    Where the first string is the ZPL to send and the second string is the printer connection string. More detail can be found here:
    http://techdocs.zebra.com/link-os/2-14/pc_net/






    share|improve this answer























    • Is the SDK compatible with VS2008, x86 and .Net 3.5?

      – John Lee
      Nov 16 '18 at 15:49











    • Since I only need to send the ZPL string, I would prefer the simple approach based on the code posted.

      – John Lee
      Nov 16 '18 at 15:56











    • The robust Link-OS® Multiplatform Software Development Kit enables app creation on PCs, smart phones and tablets, supporting the most popular operating systems. The Link-OS SDK makes creating powerful apps simple and straightforward. Multiplatform SDK supports: Java, Objective C, VB, C# and .NET The Xamarin Cross-Platform Development tool set for iOS and Android Link-OS printers and the ZC family of card printers

      – banno
      Nov 16 '18 at 16:03











    • My bad readme states Microsoft™ .NET Framework 4.7 (or higher)

      – banno
      Nov 16 '18 at 16:07











    • That was what I was afraid of.

      – John Lee
      Nov 16 '18 at 18:25










    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330880%2fsending-raw-text-to-printer-via-usb%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    Add this class to your project



    Imports System.IO
    Imports System.Drawing.Printing
    Imports System.Runtime.InteropServices
    Public Class RAWPOSPrinter
    ' Structure and API declarions:
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
    Structure DOCINFOW
    <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String
    <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String
    <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String
    End Structure

    <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
    SetLastError:=True, CharSet:=CharSet.Unicode, _
    ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
    SetLastError:=True, CharSet:=CharSet.Unicode, _
    ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
    SetLastError:=True, CharSet:=CharSet.Unicode, _
    ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
    SetLastError:=True, CharSet:=CharSet.Unicode, _
    ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
    SetLastError:=True, CharSet:=CharSet.Unicode, _
    ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
    SetLastError:=True, CharSet:=CharSet.Unicode, _
    ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
    End Function
    <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
    SetLastError:=True, CharSet:=CharSet.Unicode, _
    ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
    End Function

    ' SendBytesToPrinter()
    ' When the function is given a printer name and an unmanaged array of
    ' bytes, the function sends those bytes to the print queue.
    ' Returns True on success or False on failure.
    Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
    Dim hPrinter As IntPtr ' The printer handle.
    Dim dwError As Int32 ' Last error - in case there was trouble.
    Dim di As DOCINFOW ' Describes your document (name, port, data type).
    Dim dwWritten As Int32 ' The number of bytes written by WritePrinter().
    Dim bSuccess As Boolean ' Your success code.

    ' Set up the DOCINFO structure.
    di = New DOCINFOW
    With di
    .pDocName = "RAW DOC"
    .pDataType = "RAW"
    End With
    ' Assume failure unless you specifically succeed.
    bSuccess = False
    If OpenPrinter(szPrinterName, hPrinter, 0) Then
    If StartDocPrinter(hPrinter, 1, di) Then
    If StartPagePrinter(hPrinter) Then
    ' Write your printer-specific bytes to the printer.
    bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
    EndPagePrinter(hPrinter)
    End If
    EndDocPrinter(hPrinter)
    End If
    ClosePrinter(hPrinter)
    End If
    ' If you did not succeed, GetLastError may give more information
    ' about why not.
    If bSuccess = False Then
    dwError = Marshal.GetLastWin32Error()
    End If
    Return bSuccess
    End Function ' SendBytesToPrinter()

    ' SendFileToPrinter()
    ' When the function is given a file name and a printer name,
    ' the function reads the contents of the file and sends the
    ' contents to the printer.
    ' Presumes that the file contains printer-ready data.
    ' Shows how to use the SendBytesToPrinter function.
    ' Returns True on success or False on failure.
    Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
    ' Open the file.
    Dim fs As New FileStream(szFileName, FileMode.Open)
    ' Create a BinaryReader on the file.
    Dim br As New BinaryReader(fs)
    ' Dim an array of bytes large enough to hold the file's contents.
    Dim bytes(fs.Length) As Byte
    Dim bSuccess As Boolean
    ' Your unmanaged pointer.
    Dim pUnmanagedBytes As IntPtr

    ' Read the contents of the file into the array.
    bytes = br.ReadBytes(fs.Length)
    ' Allocate some unmanaged memory for those bytes.
    pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)
    ' Copy the managed byte array into the unmanaged array.
    Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)
    ' Send the unmanaged bytes to the printer.
    bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)
    ' Free the unmanaged memory that you allocated earlier.
    Marshal.FreeCoTaskMem(pUnmanagedBytes)
    Return bSuccess
    End Function ' SendFileToPrinter()

    ' When the function is given a string and a printer name,
    ' the function sends the string to the printer as raw bytes.
    Public Shared Sub SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)
    Dim pBytes As IntPtr
    Dim dwCount As Int32
    ' How many characters are in the string?
    dwCount = szString.Length()
    ' Assume that the printer is expecting ANSI text, and then convert
    ' the string to ANSI text.
    pBytes = Marshal.StringToCoTaskMemAnsi(szString)
    ' Send the converted ANSI string to the printer.
    SendBytesToPrinter(szPrinterName, pBytes, dwCount)
    Marshal.FreeCoTaskMem(pBytes)
    End Sub
    End Class


    Then in your code, call the following:



    RAWPOSPrinter.SendStringToPrinter("<NAME OF PRINTER AS IT APPEARS IN DEVICES AND PRINTERS>", "<YOUR ZEBRA COMMAND STRING>")





    share|improve this answer



























      1














      Add this class to your project



      Imports System.IO
      Imports System.Drawing.Printing
      Imports System.Runtime.InteropServices
      Public Class RAWPOSPrinter
      ' Structure and API declarions:
      <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
      Structure DOCINFOW
      <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String
      <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String
      <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String
      End Structure

      <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
      Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean
      End Function
      <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
      Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
      End Function
      <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
      Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean
      End Function
      <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
      Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
      End Function
      <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
      Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
      End Function
      <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
      Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
      End Function
      <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
      Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
      End Function

      ' SendBytesToPrinter()
      ' When the function is given a printer name and an unmanaged array of
      ' bytes, the function sends those bytes to the print queue.
      ' Returns True on success or False on failure.
      Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
      Dim hPrinter As IntPtr ' The printer handle.
      Dim dwError As Int32 ' Last error - in case there was trouble.
      Dim di As DOCINFOW ' Describes your document (name, port, data type).
      Dim dwWritten As Int32 ' The number of bytes written by WritePrinter().
      Dim bSuccess As Boolean ' Your success code.

      ' Set up the DOCINFO structure.
      di = New DOCINFOW
      With di
      .pDocName = "RAW DOC"
      .pDataType = "RAW"
      End With
      ' Assume failure unless you specifically succeed.
      bSuccess = False
      If OpenPrinter(szPrinterName, hPrinter, 0) Then
      If StartDocPrinter(hPrinter, 1, di) Then
      If StartPagePrinter(hPrinter) Then
      ' Write your printer-specific bytes to the printer.
      bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
      EndPagePrinter(hPrinter)
      End If
      EndDocPrinter(hPrinter)
      End If
      ClosePrinter(hPrinter)
      End If
      ' If you did not succeed, GetLastError may give more information
      ' about why not.
      If bSuccess = False Then
      dwError = Marshal.GetLastWin32Error()
      End If
      Return bSuccess
      End Function ' SendBytesToPrinter()

      ' SendFileToPrinter()
      ' When the function is given a file name and a printer name,
      ' the function reads the contents of the file and sends the
      ' contents to the printer.
      ' Presumes that the file contains printer-ready data.
      ' Shows how to use the SendBytesToPrinter function.
      ' Returns True on success or False on failure.
      Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
      ' Open the file.
      Dim fs As New FileStream(szFileName, FileMode.Open)
      ' Create a BinaryReader on the file.
      Dim br As New BinaryReader(fs)
      ' Dim an array of bytes large enough to hold the file's contents.
      Dim bytes(fs.Length) As Byte
      Dim bSuccess As Boolean
      ' Your unmanaged pointer.
      Dim pUnmanagedBytes As IntPtr

      ' Read the contents of the file into the array.
      bytes = br.ReadBytes(fs.Length)
      ' Allocate some unmanaged memory for those bytes.
      pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)
      ' Copy the managed byte array into the unmanaged array.
      Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)
      ' Send the unmanaged bytes to the printer.
      bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)
      ' Free the unmanaged memory that you allocated earlier.
      Marshal.FreeCoTaskMem(pUnmanagedBytes)
      Return bSuccess
      End Function ' SendFileToPrinter()

      ' When the function is given a string and a printer name,
      ' the function sends the string to the printer as raw bytes.
      Public Shared Sub SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)
      Dim pBytes As IntPtr
      Dim dwCount As Int32
      ' How many characters are in the string?
      dwCount = szString.Length()
      ' Assume that the printer is expecting ANSI text, and then convert
      ' the string to ANSI text.
      pBytes = Marshal.StringToCoTaskMemAnsi(szString)
      ' Send the converted ANSI string to the printer.
      SendBytesToPrinter(szPrinterName, pBytes, dwCount)
      Marshal.FreeCoTaskMem(pBytes)
      End Sub
      End Class


      Then in your code, call the following:



      RAWPOSPrinter.SendStringToPrinter("<NAME OF PRINTER AS IT APPEARS IN DEVICES AND PRINTERS>", "<YOUR ZEBRA COMMAND STRING>")





      share|improve this answer

























        1












        1








        1







        Add this class to your project



        Imports System.IO
        Imports System.Drawing.Printing
        Imports System.Runtime.InteropServices
        Public Class RAWPOSPrinter
        ' Structure and API declarions:
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
        Structure DOCINFOW
        <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String
        <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String
        <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String
        End Structure

        <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
        End Function

        ' SendBytesToPrinter()
        ' When the function is given a printer name and an unmanaged array of
        ' bytes, the function sends those bytes to the print queue.
        ' Returns True on success or False on failure.
        Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
        Dim hPrinter As IntPtr ' The printer handle.
        Dim dwError As Int32 ' Last error - in case there was trouble.
        Dim di As DOCINFOW ' Describes your document (name, port, data type).
        Dim dwWritten As Int32 ' The number of bytes written by WritePrinter().
        Dim bSuccess As Boolean ' Your success code.

        ' Set up the DOCINFO structure.
        di = New DOCINFOW
        With di
        .pDocName = "RAW DOC"
        .pDataType = "RAW"
        End With
        ' Assume failure unless you specifically succeed.
        bSuccess = False
        If OpenPrinter(szPrinterName, hPrinter, 0) Then
        If StartDocPrinter(hPrinter, 1, di) Then
        If StartPagePrinter(hPrinter) Then
        ' Write your printer-specific bytes to the printer.
        bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
        EndPagePrinter(hPrinter)
        End If
        EndDocPrinter(hPrinter)
        End If
        ClosePrinter(hPrinter)
        End If
        ' If you did not succeed, GetLastError may give more information
        ' about why not.
        If bSuccess = False Then
        dwError = Marshal.GetLastWin32Error()
        End If
        Return bSuccess
        End Function ' SendBytesToPrinter()

        ' SendFileToPrinter()
        ' When the function is given a file name and a printer name,
        ' the function reads the contents of the file and sends the
        ' contents to the printer.
        ' Presumes that the file contains printer-ready data.
        ' Shows how to use the SendBytesToPrinter function.
        ' Returns True on success or False on failure.
        Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
        ' Open the file.
        Dim fs As New FileStream(szFileName, FileMode.Open)
        ' Create a BinaryReader on the file.
        Dim br As New BinaryReader(fs)
        ' Dim an array of bytes large enough to hold the file's contents.
        Dim bytes(fs.Length) As Byte
        Dim bSuccess As Boolean
        ' Your unmanaged pointer.
        Dim pUnmanagedBytes As IntPtr

        ' Read the contents of the file into the array.
        bytes = br.ReadBytes(fs.Length)
        ' Allocate some unmanaged memory for those bytes.
        pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)
        ' Copy the managed byte array into the unmanaged array.
        Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)
        ' Send the unmanaged bytes to the printer.
        bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)
        ' Free the unmanaged memory that you allocated earlier.
        Marshal.FreeCoTaskMem(pUnmanagedBytes)
        Return bSuccess
        End Function ' SendFileToPrinter()

        ' When the function is given a string and a printer name,
        ' the function sends the string to the printer as raw bytes.
        Public Shared Sub SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)
        Dim pBytes As IntPtr
        Dim dwCount As Int32
        ' How many characters are in the string?
        dwCount = szString.Length()
        ' Assume that the printer is expecting ANSI text, and then convert
        ' the string to ANSI text.
        pBytes = Marshal.StringToCoTaskMemAnsi(szString)
        ' Send the converted ANSI string to the printer.
        SendBytesToPrinter(szPrinterName, pBytes, dwCount)
        Marshal.FreeCoTaskMem(pBytes)
        End Sub
        End Class


        Then in your code, call the following:



        RAWPOSPrinter.SendStringToPrinter("<NAME OF PRINTER AS IT APPEARS IN DEVICES AND PRINTERS>", "<YOUR ZEBRA COMMAND STRING>")





        share|improve this answer













        Add this class to your project



        Imports System.IO
        Imports System.Drawing.Printing
        Imports System.Runtime.InteropServices
        Public Class RAWPOSPrinter
        ' Structure and API declarions:
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
        Structure DOCINFOW
        <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String
        <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String
        <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String
        End Structure

        <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
        SetLastError:=True, CharSet:=CharSet.Unicode, _
        ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
        End Function

        ' SendBytesToPrinter()
        ' When the function is given a printer name and an unmanaged array of
        ' bytes, the function sends those bytes to the print queue.
        ' Returns True on success or False on failure.
        Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
        Dim hPrinter As IntPtr ' The printer handle.
        Dim dwError As Int32 ' Last error - in case there was trouble.
        Dim di As DOCINFOW ' Describes your document (name, port, data type).
        Dim dwWritten As Int32 ' The number of bytes written by WritePrinter().
        Dim bSuccess As Boolean ' Your success code.

        ' Set up the DOCINFO structure.
        di = New DOCINFOW
        With di
        .pDocName = "RAW DOC"
        .pDataType = "RAW"
        End With
        ' Assume failure unless you specifically succeed.
        bSuccess = False
        If OpenPrinter(szPrinterName, hPrinter, 0) Then
        If StartDocPrinter(hPrinter, 1, di) Then
        If StartPagePrinter(hPrinter) Then
        ' Write your printer-specific bytes to the printer.
        bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
        EndPagePrinter(hPrinter)
        End If
        EndDocPrinter(hPrinter)
        End If
        ClosePrinter(hPrinter)
        End If
        ' If you did not succeed, GetLastError may give more information
        ' about why not.
        If bSuccess = False Then
        dwError = Marshal.GetLastWin32Error()
        End If
        Return bSuccess
        End Function ' SendBytesToPrinter()

        ' SendFileToPrinter()
        ' When the function is given a file name and a printer name,
        ' the function reads the contents of the file and sends the
        ' contents to the printer.
        ' Presumes that the file contains printer-ready data.
        ' Shows how to use the SendBytesToPrinter function.
        ' Returns True on success or False on failure.
        Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
        ' Open the file.
        Dim fs As New FileStream(szFileName, FileMode.Open)
        ' Create a BinaryReader on the file.
        Dim br As New BinaryReader(fs)
        ' Dim an array of bytes large enough to hold the file's contents.
        Dim bytes(fs.Length) As Byte
        Dim bSuccess As Boolean
        ' Your unmanaged pointer.
        Dim pUnmanagedBytes As IntPtr

        ' Read the contents of the file into the array.
        bytes = br.ReadBytes(fs.Length)
        ' Allocate some unmanaged memory for those bytes.
        pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)
        ' Copy the managed byte array into the unmanaged array.
        Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)
        ' Send the unmanaged bytes to the printer.
        bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)
        ' Free the unmanaged memory that you allocated earlier.
        Marshal.FreeCoTaskMem(pUnmanagedBytes)
        Return bSuccess
        End Function ' SendFileToPrinter()

        ' When the function is given a string and a printer name,
        ' the function sends the string to the printer as raw bytes.
        Public Shared Sub SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)
        Dim pBytes As IntPtr
        Dim dwCount As Int32
        ' How many characters are in the string?
        dwCount = szString.Length()
        ' Assume that the printer is expecting ANSI text, and then convert
        ' the string to ANSI text.
        pBytes = Marshal.StringToCoTaskMemAnsi(szString)
        ' Send the converted ANSI string to the printer.
        SendBytesToPrinter(szPrinterName, pBytes, dwCount)
        Marshal.FreeCoTaskMem(pBytes)
        End Sub
        End Class


        Then in your code, call the following:



        RAWPOSPrinter.SendStringToPrinter("<NAME OF PRINTER AS IT APPEARS IN DEVICES AND PRINTERS>", "<YOUR ZEBRA COMMAND STRING>")






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 19 '18 at 8:46









        F0r3v3r-A-N00bF0r3v3r-A-N00b

        1,33831527




        1,33831527























            0














            Using the Zebra .Net SDK you can call the following function:
            PrinterUtil.SendContents Method (String, String)



            Where the first string is the ZPL to send and the second string is the printer connection string. More detail can be found here:
            http://techdocs.zebra.com/link-os/2-14/pc_net/






            share|improve this answer























            • Is the SDK compatible with VS2008, x86 and .Net 3.5?

              – John Lee
              Nov 16 '18 at 15:49











            • Since I only need to send the ZPL string, I would prefer the simple approach based on the code posted.

              – John Lee
              Nov 16 '18 at 15:56











            • The robust Link-OS® Multiplatform Software Development Kit enables app creation on PCs, smart phones and tablets, supporting the most popular operating systems. The Link-OS SDK makes creating powerful apps simple and straightforward. Multiplatform SDK supports: Java, Objective C, VB, C# and .NET The Xamarin Cross-Platform Development tool set for iOS and Android Link-OS printers and the ZC family of card printers

              – banno
              Nov 16 '18 at 16:03











            • My bad readme states Microsoft™ .NET Framework 4.7 (or higher)

              – banno
              Nov 16 '18 at 16:07











            • That was what I was afraid of.

              – John Lee
              Nov 16 '18 at 18:25















            0














            Using the Zebra .Net SDK you can call the following function:
            PrinterUtil.SendContents Method (String, String)



            Where the first string is the ZPL to send and the second string is the printer connection string. More detail can be found here:
            http://techdocs.zebra.com/link-os/2-14/pc_net/






            share|improve this answer























            • Is the SDK compatible with VS2008, x86 and .Net 3.5?

              – John Lee
              Nov 16 '18 at 15:49











            • Since I only need to send the ZPL string, I would prefer the simple approach based on the code posted.

              – John Lee
              Nov 16 '18 at 15:56











            • The robust Link-OS® Multiplatform Software Development Kit enables app creation on PCs, smart phones and tablets, supporting the most popular operating systems. The Link-OS SDK makes creating powerful apps simple and straightforward. Multiplatform SDK supports: Java, Objective C, VB, C# and .NET The Xamarin Cross-Platform Development tool set for iOS and Android Link-OS printers and the ZC family of card printers

              – banno
              Nov 16 '18 at 16:03











            • My bad readme states Microsoft™ .NET Framework 4.7 (or higher)

              – banno
              Nov 16 '18 at 16:07











            • That was what I was afraid of.

              – John Lee
              Nov 16 '18 at 18:25













            0












            0








            0







            Using the Zebra .Net SDK you can call the following function:
            PrinterUtil.SendContents Method (String, String)



            Where the first string is the ZPL to send and the second string is the printer connection string. More detail can be found here:
            http://techdocs.zebra.com/link-os/2-14/pc_net/






            share|improve this answer













            Using the Zebra .Net SDK you can call the following function:
            PrinterUtil.SendContents Method (String, String)



            Where the first string is the ZPL to send and the second string is the printer connection string. More detail can be found here:
            http://techdocs.zebra.com/link-os/2-14/pc_net/







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 16 '18 at 14:28









            bannobanno

            1,204711




            1,204711












            • Is the SDK compatible with VS2008, x86 and .Net 3.5?

              – John Lee
              Nov 16 '18 at 15:49











            • Since I only need to send the ZPL string, I would prefer the simple approach based on the code posted.

              – John Lee
              Nov 16 '18 at 15:56











            • The robust Link-OS® Multiplatform Software Development Kit enables app creation on PCs, smart phones and tablets, supporting the most popular operating systems. The Link-OS SDK makes creating powerful apps simple and straightforward. Multiplatform SDK supports: Java, Objective C, VB, C# and .NET The Xamarin Cross-Platform Development tool set for iOS and Android Link-OS printers and the ZC family of card printers

              – banno
              Nov 16 '18 at 16:03











            • My bad readme states Microsoft™ .NET Framework 4.7 (or higher)

              – banno
              Nov 16 '18 at 16:07











            • That was what I was afraid of.

              – John Lee
              Nov 16 '18 at 18:25

















            • Is the SDK compatible with VS2008, x86 and .Net 3.5?

              – John Lee
              Nov 16 '18 at 15:49











            • Since I only need to send the ZPL string, I would prefer the simple approach based on the code posted.

              – John Lee
              Nov 16 '18 at 15:56











            • The robust Link-OS® Multiplatform Software Development Kit enables app creation on PCs, smart phones and tablets, supporting the most popular operating systems. The Link-OS SDK makes creating powerful apps simple and straightforward. Multiplatform SDK supports: Java, Objective C, VB, C# and .NET The Xamarin Cross-Platform Development tool set for iOS and Android Link-OS printers and the ZC family of card printers

              – banno
              Nov 16 '18 at 16:03











            • My bad readme states Microsoft™ .NET Framework 4.7 (or higher)

              – banno
              Nov 16 '18 at 16:07











            • That was what I was afraid of.

              – John Lee
              Nov 16 '18 at 18:25
















            Is the SDK compatible with VS2008, x86 and .Net 3.5?

            – John Lee
            Nov 16 '18 at 15:49





            Is the SDK compatible with VS2008, x86 and .Net 3.5?

            – John Lee
            Nov 16 '18 at 15:49













            Since I only need to send the ZPL string, I would prefer the simple approach based on the code posted.

            – John Lee
            Nov 16 '18 at 15:56





            Since I only need to send the ZPL string, I would prefer the simple approach based on the code posted.

            – John Lee
            Nov 16 '18 at 15:56













            The robust Link-OS® Multiplatform Software Development Kit enables app creation on PCs, smart phones and tablets, supporting the most popular operating systems. The Link-OS SDK makes creating powerful apps simple and straightforward. Multiplatform SDK supports: Java, Objective C, VB, C# and .NET The Xamarin Cross-Platform Development tool set for iOS and Android Link-OS printers and the ZC family of card printers

            – banno
            Nov 16 '18 at 16:03





            The robust Link-OS® Multiplatform Software Development Kit enables app creation on PCs, smart phones and tablets, supporting the most popular operating systems. The Link-OS SDK makes creating powerful apps simple and straightforward. Multiplatform SDK supports: Java, Objective C, VB, C# and .NET The Xamarin Cross-Platform Development tool set for iOS and Android Link-OS printers and the ZC family of card printers

            – banno
            Nov 16 '18 at 16:03













            My bad readme states Microsoft™ .NET Framework 4.7 (or higher)

            – banno
            Nov 16 '18 at 16:07





            My bad readme states Microsoft™ .NET Framework 4.7 (or higher)

            – banno
            Nov 16 '18 at 16:07













            That was what I was afraid of.

            – John Lee
            Nov 16 '18 at 18:25





            That was what I was afraid of.

            – John Lee
            Nov 16 '18 at 18:25

















            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330880%2fsending-raw-text-to-printer-via-usb%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Top Tejano songwriter Luis Silva dead of heart attack at 64

            政党

            天津地下鉄3号線