Вообщем нарыл вот такую функцию без использования ограничивающих макросов, но проблема не пропала, при дебаге попадаю в блок
if(ERROR_INSUFFICIENT_BUFFER == ::GetLastError())
#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;
};
int main(int argc, char* argv[])
{
char *szBuf = new char[BUG_ARR_MAX];
BSTR bst = _com_util_fix::ConvertStringToBSTR(szBuf);
}
Есть у кого-то какие-то идеи?