我有通过USB连接的Zebra打印机,并且正在尝试使用命令^XA^HWR:^XZ
读取打印机的内存。该命令适用于TCP / IP。
我什至不确定我是否正确设置了方法标题。
[DllImport("winspool.Drv", EntryPoint = "ReadPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
static extern bool ReadPrinter(IntPtr hPrinter, IntPtr pBuf, int cbBuf, out int pNoBytesRead);
方法ReadPrinter
始终返回false和0个读取字节。当我尝试获取LastWin32Error
时,会得到各种0、6或63(ERROR_SUCCESS
-尽管它返回false并且没有数据,ERROR_INVALID_HANDLE
或{{1} }),具体取决于我要尝试的内容。我尝试了几种方法标头和不同的方法,但是没有一个方法导致成功读取数据。我启用了“双向支持”并安装了打印机驱动程序。它可能看起来像是其他线程的副本,但是我已经理解了它们,但它们都没有帮助。
代码段:
ERROR_PRINT_CANCELLED
答案 0 :(得分:0)
我通过使用FileStreams
和StreamReaders
的Visual Basic示例解决了该问题。感谢@kunif指出了示例代码。
kernel32.dll
代替了winspool.Drv
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern SafeFileHandle CreateFile(string lpFileName, EFileAccess dwDesiredAccess,
EFileShare dwShareMode, IntPtr lpSecurityAttributes,
ECreationDisposition dwCreationDisposition,
EFileAttributes dwFlagsAndAttributes,
IntPtr hTemplateFile);
private static string ReadUsbPort(StreamReader sr)
{
string readResult = string.Empty;
if (sr != null && sr.BaseStream != null)
{
do
{
readResult += sr.ReadLine();
readResult += "\r";
}
while (sr.EndOfStream == false);
}
return readResult;
}