Кто-нибудь знает, как я могу преобразовать BSTR в int в VC++ 2008Преобразование BSTR в int
Заранее спасибо.
Кто-нибудь знает, как я могу преобразовать BSTR в int в VC++ 2008Преобразование BSTR в int
Заранее спасибо.
Вы можете pass a BSTR safely к любой функции, ожидая wchar_t *
. Таким образом, вы можете использовать _wtoi().
Google предлагает VarI4FromStr
:
HRESULT VarI4FromStr(
_In_ LPCOLESTR strIn,
_In_ LCID lcid,
_In_ ULONG dwFlags,
_Out_ LONG *plOut
);
BSTR s = SysAllocString(L"42");
int i = _wtoi(s);
Попробуйте функцию _wtoi:
int i = _wtoi(mybstr);
Вы должны использовать :: VarI4FromStr (...).
Вы должны быть в состоянии использовать подталкивание :: 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 <>
Он будет работать для любых типов, которые могут быть переданы через поток и его типобезопасен!
Это метод, который я использую для анализа значений из строк. Он похож на 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
}
Вы должны использовать VarI4FromStr, как указано в других указателях. BSTR
не wchar_t*
из-за различий в их NULL semantics (SysStringLen(NULL)
это нормально, но wcslen(NULL)
нет).
Вы не можете, NULL - действительное значение BSTR. – Constantin 2008-10-03 22:26:27