如何正确转换?
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 *'
我无法找到解决这个问题的方法,好吗?
答案 0 :(得分:1)
CComVariant::ChangeType
通过.bstrVal
成员,_ttoi
而不是atoi
向您提供:
VARIANT vtIndex;
// ...
CComVariant vStringIndex;
HRESULT nResult = vStringIndex.ChangeType(VT_BSTR, &vtIndex);
if(FAILED(nResult))
; // TODO: Handle error
CString csIndex(vStringIndex.bstrVal);
csIndex.MakeUpper();
if (csIndex.Left(3) == PROCESSUS_TABLE)
{
lIndex = _ttoi(csIndex.Mid(3));
// ...
答案 1 :(得分:1)
变量&#csIndex&#39;是一个unicoce字符串(wchar_t
),而宏LPCSTR是ansi字符串(char
)。
所以你应该使用Unicode函数,代码将是:
lIndex = _wtoi((LPCWSTR)csIndex.Mid(3));
这一行没有问题:
csIndex = (LPCSTR)(_bstr_t)vtIndex;
这是因为智能指针类型_bstr_t可以自动处理char * / wchar_t *转换。