本帖最后由 qufusongyu 于 2011-08-20 11:07:15 编辑

解决方案 »

  1.   

    先试试StringBuilder接收,不行用byte[],再不行就用unsafe code...还不行就得改C++ DLL或者再加一层wrapper了...用CString这种MFC类型做接口就是吃饱了专门找事儿的...
      

  2.   

    void CDemoCardDlg::OnOK() 
    {
    // TODO: Add extra validation here
    // UpdateData(TRUE);
    m_cardstate = _T("");
    m_cardno = _T("");
    m_cardclose = _T("");
    m_device = _T("");
    m_port = _T("");
    m_deviceno = _T("");
    int ret=0;
    CString cardno,cardinfo;
    ret=LQPORT_open();
    if(ret==1)
    m_port = _T("打开设备成功");
    else
    {
    m_port = _T("打开设备失败!!");
    goto end;
    } ret=LQCheckReader();
    if(ret==1)
    m_device = _T("合法设备");
    else
    {
    m_device = _T("非法设备!!");
    goto out;
    }
    ret=LQCheck_Card();
    if(ret==0)
    {
    m_cardstate = _T("新卡!!");
    goto out;
    }
    else if(ret==1)
    {
    m_cardstate = _T("已初始化");
    goto out;
    }
    else if(ret==2)
    {
    m_cardstate = _T("卡已发行");
    }
    else if(ret==3)
    {
    m_cardstate = _T("卡未初始化");
    goto out;
    }
    else if(ret==4)
    {
    m_cardstate = _T("非法卡");
    goto out;
    }
    else if(ret==5)
    {
    m_cardstate = _T("非识别卡");
    goto out;
    }
    else if(ret==6)
    {
    m_cardstate = _T("卡密码有误");
    goto out;
    }
    else if(ret==7)
    {
    m_cardstate = _T("卡已损坏");
    goto out;
    }
    else if(ret==8)
    {
    m_cardstate = _T("无卡");
    goto out;
    }
    else if(ret==9)
    {
    m_cardstate = _T("旧卡");
    goto out;
    }
    else 
    {
    m_cardstate = _T("异常卡");
    goto out;
    }
    // 0--新卡   1--此卡已初始化  2---此卡已发行   3---此卡未初始化   4---此卡为非法卡  5---此卡为非识别卡
    //  6---此卡密码有误  7--此卡已损坏   8--无卡   9---旧卡  
    // 其它--异常卡
    cardinfo=LQRead_Card_Info();
    m_deviceno = cardinfo;
    cardno=LQGetCardNO();
    m_cardno=cardno;
    out:
    ret=LQCPORT_close();
    if(ret==0)
    m_cardclose = _T("设备关闭成功");
    else
    m_cardclose = _T("设备关闭失败");

    end:
    UpdateData(FALSE);

    // CDialog::OnOK();
    return;
    }void CDemoCardDlg::OnCancel() 
    {
    // TODO: Add extra cleanup here

    CDialog::OnCancel();
    }
      

  3.   

    楼主,我要你发“private static extern string LQRead_Card_Info(); //读卡信息”
    这个函数的C++定义,你贴出那么多干什么?
      

  4.   


    LQDKQDLL BSTR LQRead_Card_Info();//读卡信息
    //返回 卡信息
    LQDKQDLL BSTR LQRead_Device_Num();//读设备编号
    //返回 设备编号
    LQDKQDLL BSTR LQGetCardNO();//获取读卡号
    //返回 卡号
    LQDKQDLL BSTR LQGetOldInfo();//获取就卡信息
    //返回旧卡信息
    LQDKQDLL BSTR LQGetUSERID();//获取用户ID
    //返回用户ID
    LQDKQDLL BSTR LQGetresult();//获取结果
      

  5.   

    MFC里CString只有一个成员
    class CString{
        char* m_pStr;
    }
    其实CString就是个char*,但是这个char*指向的字符串不一定是以'\0'结尾的,所以传递的时候肯定有问题
      

  6.   

    厂家改成
    char * WINAPI LQRead_Card_Info();//读卡信息替换了DLL,现在就好了.谢谢大家了