Re[7]: Максимальная длина данных BSTR
От: Fwiffo Россия  
Дата: 03.07.09 15:50
Оценка: 1 (1)
Здравствуйте, 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;

_>};

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


Есть. Выкинуть это и написать самому, полезнее будет
Первый вызов MultiByteToWideChar возвращает необходимый размер буфера, неудивительно что буфера размером на символ меньше ей не хватает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.