То ли лыжи не едут... ;)
От: Владик Россия  
Дата: 20.10.03 07:07
Оценка:
Привет!

Чего-то тут я вообще ничего не понимаю. Вот такой тривиальный код не работает:

CComBSTR bstr="Tra-la-la";
AnsiString s=(BSTR)bstr;
    MessageBox(NULL, s.c_str(), "", MB_OK);


Рисует "Tra-la-l", т.е. без последней буквы. Чего за бред?
Как все запущенно...
Re: То ли лыжи не едут... ;)
От: Владик Россия  
Дата: 20.10.03 08:13
Оценка: 40 (2)
Здравствуйте, Владик, Вы писали:

В>Чего-то тут я вообще ничего не понимаю. Вот такой тривиальный код не работает:


Я x@#ю дорогая редакция... Вот код из ATL в борландовской поставке (BCB5/6). Баг выделен жирным:


inline BSTR A2WBSTR(LPCSTR lp, int nLen = -1)
{
    USES_CONVERSION;
    BSTR str = NULL;
    int nConvertedLen = MultiByteToWideChar(_acp, 0, lp,
        nLen, NULL, NULL)-1;

  if (nLen==-1)
     nConvertedLen = nConvertedLen -1;
    str = ::SysAllocStringLen(NULL, nConvertedLen);
    if (str != NULL)
    {
        MultiByteToWideChar(_acp, 0, lp, -1,
            str, nConvertedLen);
    }
    return str;
}


А вот код из ATL от VC6:

inline BSTR A2WBSTR(LPCSTR lp, int nLen = -1)
{
    USES_CONVERSION;
    BSTR str = NULL;
    int nConvertedLen = MultiByteToWideChar(_acp, 0, lp,
        nLen, NULL, NULL)-1;
    str = ::SysAllocStringLen(NULL, nConvertedLen);
    if (str != NULL)
    {
        MultiByteToWideChar(_acp, 0, lp, -1,
            str, nConvertedLen);
    }
    return str;
}


Ну и как это называется???
Как все запущенно...
Re[2]: То ли лыжи не едут... ;)
От: nobody2 Россия  
Дата: 02.03.04 13:07
Оценка: 4 (1)
Вообще-то баг здесь:
inline BSTR A2WBSTR(LPCSTR lp, int nLen = -1)
{
    USES_CONVERSION;
    BSTR str = NULL;
    int nConvertedLen = MultiByteToWideChar(_acp, 0, lp,
        nLen, NULL, NULL)/* -1  <- BUG fixed */;

  if (nLen==-1)
     nConvertedLen = nConvertedLen -1;
    str = ::SysAllocStringLen(NULL, nConvertedLen);
    if (str != NULL)
    {
        MultiByteToWideChar(_acp, 0, lp, -1,
            str, nConvertedLen);
    }
    return str;
}

более подробно здесь.

Уже вышла ATL 7.0, но только где ее взять в редакции для BCB не известно.
Re[3]: То ли лыжи не едут... ;)
От: Владик Россия  
Дата: 02.03.04 14:05
Оценка:
Здравствуйте, nobody2, Вы писали:

N>Вообще-то баг здесь:


Т.е., борландовцы пытались исправить баг, но сделали еще хуже....
Как все запущенно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.