Re[8]: Максимальная длина данных BSTR
От: degtyarenko_d  
Дата: 08.07.09 10:15
Оценка:
Здравствуйте, Fwiffo, Вы писали:

F>Здравствуйте, degtyarenko_d, Вы писали:


_>>Вообщем нарыл вот такую функцию без использования ограничивающих макросов, но проблема не пропала, при дебаге попадаю в блок

_>>if(ERROR_INSUFFICIENT_BUFFER == ::GetLastError())

_>>[ccode]

_>>#define BUG_ARR_MAX 2000000
_>>inline BSTR ConvStringToBSTR(const char* pSrc)
_>>{
_>> if(!pSrc) return NULL;

_>> DWORD cwch;


_>> BSTR wsOut(NULL);


_>> if(cwch = ::MultiByteToWideChar(CP_ACP, 0, pSrc,

_>> -1, NULL, 0))//get size minus NULL terminator

_>> {

_>> cwch--;
_>> wsOut = ::SysAllocStringLen(NULL, cwch);

_>> if(wsOut)

_>> {
_>> if(!::MultiByteToWideChar(CP_ACP,
_>> 0, pSrc, -1, wsOut, cwch))
_>> {
_>> if(ERROR_INSUFFICIENT_BUFFER == ::GetLastError())
_>> return wsOut;
_>> ::SysFreeString(wsOut);//must clean up

_>> wsOut = NULL;

_>> }
_>> }

_>> };


_>> return wsOut;

_>>};

_>>Есть у кого-то какие-то идеи?


F>Есть. Выкинуть это и написать самому, полезнее будет

F>Первый вызов MultiByteToWideChar возвращает необходимый размер буфера, неудивительно что буфера размером на символ меньше ей не хватает.


Спасибо огромное, Fwiffo!!! Сделал размер +1 и все заработало!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.