如何正确转换这种方式?

    VARIANT varIndex;
    CString csIndex;
    //Index BSTR
    csIndex = (LPCSTR)(_bstr_t)vtIndex;
    csIndex.MakeUpper();
    if (csIndex.Left(3) == PROCESSUS_TABLE)
    {
        lIndex = atoi((LPCSTR)csIndex.Mid(3));
        if ((unsigned long)lIndex<0)
            return E_INVALIDARG;
    }


错误信息:

C2664: 'int atoi(const char *)' : cannot convert argument 1 from 'ATL::CStringT<wchar_t,ATL::StrTraitATL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>' to 'const char *'


我找不到解决方法,好主意吗?

最佳答案

变量'csIndex'是单行字符串(wchar_t),而宏LPCSTR用于ansi字符串(char)。

因此,您应该使用Unicode函数,代码将是:

lIndex = _wtoi((LPCWSTR)csIndex.Mid(3));


这行没有问题:

csIndex = (LPCSTR)(_bstr_t)vtIndex;


这是因为智能指针类型_bstr_t可以自动处理char * / wchar_t *转换。

08-16 13:21