2008-10-03 3 views

ответ

9

Вы можете pass a BSTR safely к любой функции, ожидая wchar_t *. Таким образом, вы можете использовать _wtoi().

+3

Вы не можете, NULL - действительное значение BSTR. – Constantin 2008-10-03 22:26:27

6

Google предлагает VarI4FromStr:

HRESULT VarI4FromStr(
    _In_ LPCOLESTR strIn, 
    _In_ LCID lcid, 
    _In_ ULONG dwFlags, 
    _Out_ LONG *plOut 
); 
2

Вы должны использовать :: VarI4FromStr (...).

1

Вы должны быть в состоянии использовать подталкивание :: lexical_cast <>

#include <boost/lexical_cast.hpp> 
#include <iostream> 

int main() 
{ 
    wchar_t  plop[] = L"123"; 
    int value = boost::lexical_cast<int>(plop); 

    std::cout << value << std::endl; 
} 

Самое замечательное в том, что lexical_cast <>
Он будет работать для любых типов, которые могут быть переданы через поток и его типобезопасен!

1

Это метод, который я использую для анализа значений из строк. Он похож на Boost's lexical cast.

std::wistringstream iss(mybstr); // Should convert from bstr to wchar_t* for the constructor 
iss >> myint;      // Puts the converted string value in to myint 
if(iss.bad() || iss.fail()) 
{ 
    // conversion failed 
} 
0

Вы должны использовать VarI4FromStr, как указано в других указателях. BSTR не wchar_t* из-за различий в их NULL semantics (SysStringLen(NULL) это нормально, но wcslen(NULL) нет).

Смежные вопросы