Здравствуйте, 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 возвращает необходимый размер буфера, неудивительно что буфера размером на символ меньше ей не хватает.