Преобразовать BSTR в целое число

Кто-нибудь знает, как преобразовать BSTR в int в VC++ 2008?

Заранее спасибо.


person Alonso    schedule 03.10.2008    source источник


Ответы (7)


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

person moonshadow    schedule 03.10.2008
comment
Вы не можете, NULL является допустимым значением BSTR. - person Constantin; 04.10.2008

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

HRESULT VarI4FromStr(
  _In_   LPCOLESTR strIn,
  _In_   LCID lcid,
  _In_   ULONG dwFlags,
  _Out_  LONG *plOut
);
person Scott Hanselman    schedule 03.10.2008

Попробуйте функцию _wtoi:

int i = _wtoi( mybstr );
person Charlie    schedule 03.10.2008

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

person Jordan Parmer    schedule 03.10.2008

Это метод, который я использую для разбора значений из строк. Это похоже на лексический состав Boost.

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
}
person luke    schedule 03.10.2008

Вы должны иметь возможность использовать boost::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‹>
он будет работать для любых типов, которые можно передать через поток, и его безопасный тип!

person Martin York    schedule 03.10.2008

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

person Constantin    schedule 03.10.2008