在用Escape()函数向打印机直接发送控制字符时遇到了一些迷惑;
    在EPSON-1600K的控制字符集中,有一个能实现控制打印机走纸的控制字符;使用手册上写着该控制字符有如下格式:
    ASCII码:ESC  N  n
    十进制码:27  78  n
    十六进制码:1B  4E  n
    其中n是上一页最后一行和下一页第一行之间的行数;值从1到127;
    
    问题是当使用Escape()函数向打印机发送控制字符时,该函数的第四个参数该如何写?以字符串的形式发送过去后打印机能自动识别是哪种编码吗?比如下面的写法对吗?
    Escape(hDC,PASSTHROUGH,7,"27 78 1",NULL);还望各位高手赐教啊~~~!!!!附:
    int Escape(
      HDC hdc,           
      int nEscape,       
      int cbInput,       
      LPCSTR lpvInData,    
      LPVOID lpvOutData  
    );

解决方案 »

  1.   

    char cCommand[4] = {27, 78, 2, 0};
    Escape(hdcPrint, PASSTHROUGH, 3, cCommand, NULL);
      

  2.   

    char cCommand[4] = {27, 78, '1', 0};
    Escape(hdcPrint, PASSTHROUGH, 3, cCommand, NULL);
      

  3.   

    谢谢,谢谢~~~~~
    lfchen(一条晚起的虫) ,厉害!那也就是说打印机会自动识别传过去的控制字符是哪种编码吗?
    那如果要发送ASCII码和十六进制码呢?
      

  4.   

    发送ASCII,十六进制都是一回事
    ASCII码:ESC N n
    十进制码:27 78 n
    十六进制码:1B 4E n
    仔细看看 ESC = 27 = 0x27 , 'N' = 78 = 0x4E
      

  5.   

    今天到现场去调了一下;还是有问题啊;    运行时要报错:某指令引用了某段内存,该段内存不能为读!
        Debug时,程序运行到 Escape(hdcPrint, PASSTHROUGH, 3, cCommand, NULL);这一句时提示:
        "Unhandled exception in XXX.exe(GDI32.DLL) : 0xC0000005 : Access Violation"
        
        后来用CDC的drawEscape(PASSTHROUGH, 3, cCommand)试了一下,没有报错;但是返回的值小于0;也没能实现控制打印机不走纸的功能;
        高手们再来帮看一下啊;谢谢啦~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~