2016-04-29 5 views
0

Je dois créer un programme C++ qui enverra des données à l'imprimante Zebra QLn320 de Motorola PDA (via RS232). Motorola fournit une interface (Mobility Development Kit), mais quelque chose ne va pas. Lorsque je crée une commande CPCL standard et l'envoie à l'imprimante à partir de VB.NET (via RS232) cela fonctionne bien. Mais C++ (ou Motorola API) a des problèmes et rien ne se passe. Je le fais comme ceci:C++ CPCL Zebra via Motorola PRINT_SendCommand()

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); 

Des idées, s'il vous plaît? PS: L'imprimante signale que des données arrivent, mais rien ne se passe. Si je demande à l'imprimante pour son statut (en utilisant la méthode Motorola PRINT_GetStatus()), il répond: 0x80000001 = STATUS_SUPPORTED et NOT_RESPONDING.

Pour votre information: Mon travail code VB.NET est:

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: Ce code C++ fonctionne aussi parfaitement, mais il n'utilise pas la méthode souhaitée 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); 

Répondre

0

Ainsi, après De nombreuses heures de test J'ai découvert que si vous utilisez PRINT_sendCommand(), vous ne pouvez pas utiliser les méthodes PRINT_StartPage() et PRINT_EndPage(). Il suffit de les supprimer. Pourquoi cela ne peut-il pas être mentionné dans le manuel?