我的程序中需要打印条码和铭牌,连接了两台打印机,一台是本地打印机(设置为默认打印机),另一台是网络共享打印机。默认打印都OK,可是共享打印机就不能打印。我的程序如下,请问:在VC中如何调用共享打印机进行打印。以下代码是调用共享打印机的代码。CDC dc;
dc.CreateDC("TEC B-452","TEC B-452","LPT1",NULL);
DOCINFO di;
::ZeroMemory (&di,sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
if (dc.StartDoc(&di) == -1)
{
    AfxMessageBox("StartDoc error");
    return;
}
程序运行后,就提示StartDoc error,请问打印dc为什么创建不了?是程序上的问题还是系统设置方面的问题?

解决方案 »

  1.   

    HDC CreateDC(LPCTSTR lpszDriver,LPCTSTR lpszDevice,LPCTSTR lpszOutput,CONST DEVMODE *lpinitData);
    参数对不对呀
    EPSON LQ-1600K,EPSON24,LPT1:
      

  2.   

    DWORD dwNeeded,dwReturned;
    HDC hdc;
    PRINTER_INFO_1 *pinfo1;
    EnumPrinters(PRINTER_ENUM_NETWORK|PRINTER_ENUM_NAME|PRINTER_ENUM_REMOTE,NULL,1,NULL,0,&dwNeeded,&dwReturned);
    pinfo1=(PRINTER_INFO_1 *)malloc(dwNeeded);
    EnumPrinter(PRINTER_ENUM_NETWORK|PRINTER_ENUM_NAME|PRINTER_ENUM_REMOTE,NULL,1,(PBYTE)pinfo1,dwNeeded,&dwNeeded,&dwReturned);
    hdc=CreateDC(NULL,pinfo1->pName,NULL,NULL);
    free(pinfo1);
    static DOCINFO di={sizeof(DOCINFO),TEXT("print1")};
    if(hdcprint!=NULL)
    {
    if(StartDoc(hdcprint,&di)>0)
    if(StartPage(hdcprint)>0&&EndPage(hdcprint)>0)
    EndDoc(hdcprint);
    DeleteDC(hdcprint);
    }
      

  3.   

    hdc=CreateDC(("TEC B-452",pinfo1->pName,","LPT1",NULL);
      

  4.   

    参数都是对的,驱动名和打印机名都是TEC B-452。
    请问Jarrylogin(正经事情我不会,歪门邪道样样行):hdc=CreateDC(("TEC B-452",pinfo1->pName,","LPT1",NULL); 是什么意思??是不是应该写成hdc=CreateDC("TEC B-452","pinfo1->pName,","LPT1",NULL);啊??
      

  5.   

    还有 DeleteDC(hdcprint)应该是DeleteDC(hdc)吧?
      

  6.   

    hdc=CreateDC("TEC B-452","pinfo1->pName,","LPT1",NULL);
    首先要枚举网络打印机
    EnumPrinters(PRINTER_ENUM_NETWORK|PRINTER_ENUM_NAME|PRINTER_ENUM_REMOTE,NULL,1,NULL,0,&dwNeeded,&dwReturned);
    pinfo1=(PRINTER_INFO_1 *)malloc(dwNeeded);
    EnumPrinter(PRINTER_ENUM_NETWORK|PRINTER_ENUM_NAME|PRINTER_ENUM_REMOTE,NULL,1,(PBYTE)pinfo1,dwNeeded,&dwNeeded,&dwReturned);
    hdc=CreateDC(NULL,pinfo1->pName,NULL,NULL);
      

  7.   

    楼上的,我有点不懂了,
    hdc=CreateDC("TEC B-452","pinfo1->pName,","LPT1",NULL);

    hdc=CreateDC(NULL,pinfo1->pName,NULL,NULL);有什么不同啊?麻烦您给解释一下。还有DWORD dwNeeded,dwReturned;
    HDC hdc;
    PRINTER_INFO_1 *pinfo1;
    EnumPrinters(PRINTER_ENUM_NETWORK|PRINTER_ENUM_NAME|PRINTER_ENUM_REMOTE,NULL,1,NULL,0,&dwNeeded,&dwReturned);
    pinfo1=(PRINTER_INFO_1 *)malloc(dwNeeded);
    EnumPrinter(PRINTER_ENUM_NETWORK|PRINTER_ENUM_NAME|PRINTER_ENUM_REMOTE,NULL,1,(PBYTE)pinfo1,dwNeeded,&dwNeeded,&dwReturned);
    hdc=CreateDC(NULL,pinfo1->pName,NULL,NULL);
    free(pinfo1);
    static DOCINFO di={sizeof(DOCINFO),TEXT("print1")};
    if(hdcprint!=NULL)
    {
    if(StartDoc(hdcprint,&di)>0)
    if(StartPage(hdcprint)>0&&EndPage(hdcprint)>0)
       EndDoc(hdcprint);
    //是否在这里插入打印的内容??
    DeleteDC(hdcprint); //??hdcprint是否应该是hac??
    }
    hdc=CreateDC("TEC B-452","pinfo1->pName,","LPT1",NULL);这段代码应该放在上面代码中的什么位置?
      

  8.   

    hdc=CreateDC(NULL,pinfo1->pName,NULL,NULL);
    换成
    hdc=CreateDC(("TEC B-452",pinfo1->pName,"LPT1",NULL);
    枚举网络打印机的信息放pinfo1hdc是hdcprint你调试一下