Конвертировать BSTR в int - PullRequest
       13

Конвертировать BSTR в int

2 голосов
/ 03 октября 2008

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

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

Ответы [ 8 ]

9 голосов
/ 03 октября 2008

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

6 голосов
/ 03 октября 2008

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

HRESULT VarI4FromStr(
  _In_   LPCOLESTR strIn,
  _In_   LCID lcid,
  _In_   ULONG dwFlags,
  _Out_  LONG *plOut
);
3 голосов
/ 03 октября 2008

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

int i = _wtoi( mybstr );
2 голосов
/ 03 октября 2008

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

1 голос
/ 03 октября 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
}
1 голос
/ 03 октября 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 <>
Он будет работать для любых типов, которые могут быть переданы через поток, и его безопасный тип !

0 голосов
/ 04 октября 2008

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

0 голосов
/ 03 октября 2008
BSTR s = SysAllocString(L"42");
int i = _wtoi(s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...