如何正确转换这种方式?
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 *转换。