通过摩托罗拉的 C++ CPCL Zebra PRINT_SendCommand()
C++ CPCL Zebra via Motorola PRINT_SendCommand()
我需要创建一个 C++ 程序,它将数据从摩托罗拉 PDA(通过 RS232)发送到打印机 Zebra QLn320。摩托罗拉提供了一些接口(移动开发工具包),但有问题。当我创建标准 CPCL 命令并将其从 VB.NET(通过 RS232)发送到打印机时,它运行良好。但是 C++(或摩托罗拉 API)有问题并且没有任何反应。我是这样做的:
std::string mystrRN("! 0 200 200 200 1\r\nTEXT 4 0 30 40 Hello World1\r\nFORM\r\nPRINT\r\n");
const char *bRN1 = mystrRN.c_str();
LPBYTE bRN = (LPBYTE)bRN1;
HDC DeviceContext = Print_CreateDC(NULL,L"Zebra_Series",NULL,NULL);
PRINT_StartDoc(DeviceContext,NULL);
PRINT_StartPage(DeviceContext);
PRINT_SendCommand(DeviceContext,bRN, mystrRN.length(),TRUE);
PRINT_EndPage(DeviceContext);
PRINT_EndDoc(DeviceContext);
有什么想法吗?
PS: 打印机发出数据即将到来的信号,但没有任何反应。如果我询问打印机的状态(使用摩托罗拉方法 PRINT_GetStatus()),它会回答:0x80000001 = STATUS_SUPPORTED 和 NOT_RESPONDING.
仅供参考:我的工作 VB.NET 代码是:
Dim msg As String = "! 0 200 200 210 1" & vbNewLine & "TEXT 4 0 100 40 Hello World1" & vbNewLine & "FORM" & vbNewLine & "PRINT" & vbNewLine
Dim rs232 As New System.IO.Ports.SerialPort("COM1", 19200, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
rs232.Open()
rs232.Write(msg)
rs232.Close()
rs232.Dispose()
FYI2:此 C++ 代码也可以完美运行,但它未使用所需的方法 PRINT_SendCommand()
HDC DeviceContext = Print_CreateDC(NULL,L"Zebra_Series",NULL,NULL);
RECT RectText = {20, 10, 360, 350};
Print_StartDoc(DeviceContext, NULL);
Print_StartPage(DeviceContext);
Print_DrawText(DeviceContext, L"Hello World", -1, &RectText, DT_CENTER );
Print_EndPage(DeviceContext);
Print_EndDoc(DeviceContext);
所以经过几个小时的测试,我发现如果您使用 PRINT_sendCommand(),则不能使用方法 PRINT_StartPage() 和 PRINT_EndPage()。只需删除它们。为什么手册中不能提到这个。
我需要创建一个 C++ 程序,它将数据从摩托罗拉 PDA(通过 RS232)发送到打印机 Zebra QLn320。摩托罗拉提供了一些接口(移动开发工具包),但有问题。当我创建标准 CPCL 命令并将其从 VB.NET(通过 RS232)发送到打印机时,它运行良好。但是 C++(或摩托罗拉 API)有问题并且没有任何反应。我是这样做的:
std::string mystrRN("! 0 200 200 200 1\r\nTEXT 4 0 30 40 Hello World1\r\nFORM\r\nPRINT\r\n");
const char *bRN1 = mystrRN.c_str();
LPBYTE bRN = (LPBYTE)bRN1;
HDC DeviceContext = Print_CreateDC(NULL,L"Zebra_Series",NULL,NULL);
PRINT_StartDoc(DeviceContext,NULL);
PRINT_StartPage(DeviceContext);
PRINT_SendCommand(DeviceContext,bRN, mystrRN.length(),TRUE);
PRINT_EndPage(DeviceContext);
PRINT_EndDoc(DeviceContext);
有什么想法吗?
PS: 打印机发出数据即将到来的信号,但没有任何反应。如果我询问打印机的状态(使用摩托罗拉方法 PRINT_GetStatus()),它会回答:0x80000001 = STATUS_SUPPORTED 和 NOT_RESPONDING.
仅供参考:我的工作 VB.NET 代码是:
Dim msg As String = "! 0 200 200 210 1" & vbNewLine & "TEXT 4 0 100 40 Hello World1" & vbNewLine & "FORM" & vbNewLine & "PRINT" & vbNewLine
Dim rs232 As New System.IO.Ports.SerialPort("COM1", 19200, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
rs232.Open()
rs232.Write(msg)
rs232.Close()
rs232.Dispose()
FYI2:此 C++ 代码也可以完美运行,但它未使用所需的方法 PRINT_SendCommand()
HDC DeviceContext = Print_CreateDC(NULL,L"Zebra_Series",NULL,NULL);
RECT RectText = {20, 10, 360, 350};
Print_StartDoc(DeviceContext, NULL);
Print_StartPage(DeviceContext);
Print_DrawText(DeviceContext, L"Hello World", -1, &RectText, DT_CENTER );
Print_EndPage(DeviceContext);
Print_EndDoc(DeviceContext);
所以经过几个小时的测试,我发现如果您使用 PRINT_sendCommand(),则不能使用方法 PRINT_StartPage() 和 PRINT_EndPage()。只需删除它们。为什么手册中不能提到这个。