CString PrinterFun::GetPrinterName(int nId)
{
CString strName;
switch( nId ){
case PRN_CP8000D:
strName.Format("CP8000D/DW");
break;
case PRN_CP770D:
strName.Format("CP770D/DW");
break;
case PRN_CP900D:
strName.Format("CP900D/DW");
break;
case PRN_CP980D:
strName.Format("CP980D/DW");
break;
case PRN_CP3020D:
strName.Format("CP3020D");
break;
case PRN_CP900DID:
strName.Format("CP900DW(ID)");
break;
case PRN_CP9000D:
strName = _T("CP9000D/DW");
break;
case PRN_CP9000AM:
strName = _T("CP9000D(AM)");
break;
case PRN_CP9500D:
strName = _T("CP9500D/DW");
break;
case PRN_CP9550D:
strName = _T("CP9550D/DW");
break;
case PRN_CP9550DS:
strName = _T("CP9550DS");
break;
case PRN_CP3020DA:
strName = _T("CP3020DA");
break;
case PRN_CP9600D:
strName = _T("CP9600D/DW");
break;
case PRN_CP9800D:
strName = _T("CP9800D/DW");
break;
case PRN_NotSupported:
strName = _T("Unsupported");
break;
default:
strName = _T("Unknown DEVICE");
break;
}
return strName;
}
-------------------------------------------------------------------------------
VC++中测试:
void CTestDlg::OnBTSearchPrinter() 
{
// TODO: Add your control notification handler code here
UpdateData( TRUE );
if( m_pidInfo )
{
m_curPrnIdx = m_ListPrinter.GetCurSel();
}else{
m_curPrnIdx = 0;
}
PrinterFun fun;
int nId;
CString a = fun.GetPrinterName(nId);
CString str;
str.Format("%s", a);
    m_ListPrinter.AddString(str);
UpdateData( FALSE );
}
------------------------------------------------------------------------------------
我想单击此按钮获取到打印机名称显示到组合框中!程序运行编译没有错误!
运行的时候显示的值是一个很大的数字!这个数字多次获取不发生变化!
请教下该如何修改测试代码!

解决方案 »

  1.   

    str.Format("%s", a); 
        m_ListPrinter.AddString(str); 
    ------------------------------------------
    直接m_ListPrinter.AddString(a);
      

  2.   

    我看了一下,如果没初始化,应该会调用
    default: 
    strName = _T("Unknown DEVICE"); 
    break; 
      

  3.   

    确实没有初始化!可他PRN_CP8000D是枚举类型的!
    我脑子突然木了nId如何初始化!
    知道的还望告之!~
      

  4.   


    enum{PRN_CP8000D,PRN_CP770D,PRN_CP900D,PRN_CP980D} ;
    int nID=PRN_CP8000D;for(iID;nID<PRN_CP980D;nID++)
    {
      CString strPrintername = fun.GetPrinterName(nId); 
       m_ListPrinter.AddString(strPrintername ); 
    }
    每局类型实际上是整形,呵呵!
      

  5.   

    大家可能还没明白我的意思
    我的测试Test中
    void CTestDlg::OnBTSearchPrinter() 
    {
    // TODO: Add your control notification handler code here
    UpdateData( TRUE );

    PrinterFun fun;
    CString a = fun.SetPrinterList();
    CString str;
    str.Format("%d", a);
        m_ListPrinter.AddString(str);
    UpdateData( FALSE );
    }
    -------------------------------------------------------------------------
    SetPrinterList();是我在DLL中导出的函数!
    类型void
    现在我就想把这个函数中得到的信息显示到对话框
    --------------------------------------------------
    TestDlg.cpp
    E:\PrinterDll_20080423\Test\TestDlg.cpp(183) : error C2440: 'initializing' : cannot convert from 'void' to 'class CString'
            Expressions of type void cannot be converted to other types
    Error executing cl.exe.
    Creating browse info file...
    ------------------------------------------------------------------------------
    懂的帮忙改一下!~不明白的麻烦不要跟贴了!谢谢大家了!
      

  6.   

    SetPrinterList的返回值类型是啥,该不会是void类型的?
      

  7.   

    你的做法有问题:
    1. PrinterFun fun; //这是一个对象,调用它的SetPrinterList.应该导出这个类吧!
    CString a = fun.SetPrinterList(); 
    2. SetPrinterList();是我在DLL中导出的函数! 
    类型void ,你明明返回值是CString 类型,确定义void类型,不错可能吗?
      

  8.   

    我知道我写的是CSTRING是错误的,所以才发帖子大家帮忙改一下!
      

  9.   

    setPrinter(LPTSTR szPrinterName),这样,OK了吧!  
      

  10.   

    不要用CString作为参数,采用基本的数据类型,如
    BOOL PrinterFun::GetPrinterName(int nId, CHAR Buffer[], DWORD dwSize) 

    switch( nId ){ 
    case PRN_CP8000D: 
    strcpy(Buffer, "CP8000D/DW"); 
    return TRUE;default:
    return FALSE
    }VC++中测试: 
    void CTestDlg::OnBTSearchPrinter()  

    // TODO: Add your control notification handler code here 
    UpdateData( TRUE ); 
    if( m_pidInfo ) 

    m_curPrnIdx = m_ListPrinter.GetCurSel(); 
    }else{ 
    m_curPrnIdx = 0; 

    PrinterFun fun; 
    int nId; 
    CHAR Buffer[100] = {0};
    BOOL b = fun.GetPrinterName(nId, Buffer, 100); 
    ...
    UpdateData( FALSE ); 

      

  11.   

    BTW:我是通过QQ帮助解决的,并不是倒分!:)