none
CString 与_variant_t 转化的cstring比较 RRS feed

  • 问题

  • user = m_pRec->GetCollect("账号");

    struser = (LPCSTR)(_bstr_t)user;


     m_user 是eidt中的内容自己输入 比如是“11”


    user是 _variant_t类型 在数据库中为“11”
     
    m_user == struser 怎么不能比较啊 每次都是两个字符串是不同的


    C++
    2010年3月19日 7:43

答案

  •     _variant_t user;
        user.vt = VT_BSTR;
        user.bstrVal = _T("11");

        int valur = ::wcscmp(m_user.GetString(), (LPWSTR)user.bstrVal);

    没区别的。

    • 已标记为答案 新手。 2010年3月20日 6:29
    2010年3月19日 9:32
    版主

全部回复

  • 在 线  等 急急急急
    C++
    2010年3月19日 7:45
  • 1) 你类型转换没转对,应该这么写:

        VARIANT user;
        user.vt = VT_BSTR;
        user.bstrVal = _T("11");  // 构造VARIANT 对象

        int value = ::wcscmp(m_user.GetString(), (LPWSTR)user.bstrVal); // 判断

     

    2) 要看你本身程序是ANSI 内码的还是Unicode 内妈的。 因为BSTR 字符串是Unicode 内内码的。 而此时如果你应用程序工程是ANSI 内码的。 那么你m_user 的值就是ANSI 内码字符串。会导致两个不同内码字符串比较,结果也就不可能相等了。

     

     

     

    2010年3月19日 8:24
    版主
  • 我用的是_variant_t这个封装的类
    C++
    2010年3月19日 9:19
  •     _variant_t user;
        user.vt = VT_BSTR;
        user.bstrVal = _T("11");

        int valur = ::wcscmp(m_user.GetString(), (LPWSTR)user.bstrVal);

    没区别的。

    • 已标记为答案 新手。 2010年3月20日 6:29
    2010年3月19日 9:32
    版主
  • 总算解决了 原来是在数据库中拿出来的数据有有空格在里面 所以不能比较了  不过也谢谢 让我学到一些字符集的知识
    C++
    2010年3月19日 10:25