Здравствуйте, 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 и все заработало!