Кто-нибудь знает, как преобразовать BSTR в int в VC++ 2008?
Заранее спасибо.
Кто-нибудь знает, как преобразовать BSTR в int в VC++ 2008?
Заранее спасибо.
Вы можете безопасно передать BSTR любой функции, ожидающей wchar_t *
. Поэтому вы можете использовать _wtoi().
Google предлагает VarI4FromStr
:
HRESULT VarI4FromStr(
_In_ LPCOLESTR strIn,
_In_ LCID lcid,
_In_ ULONG dwFlags,
_Out_ LONG *plOut
);
Вы должны использовать ::VarI4FromStr(...).
Это метод, который я использую для разбора значений из строк. Это похоже на лексический состав 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
}
Вы должны иметь возможность использовать 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‹>
он будет работать для любых типов, которые можно передать через поток, и его безопасный тип!
Вы должны использовать VarI4FromStr, как указывали другие. BSTR
не является wchar_t*
из-за различий в их NULL-семантике (SysStringLen(NULL)
можно, а wcslen(NULL)
нет).