Re[6]: Максимальная длина данных BSTR
От: degtyarenko_d  
Дата: 03.07.09 13:30
Оценка:
Вообщем нарыл вот такую функцию без использования ограничивающих макросов, но проблема не пропала, при дебаге попадаю в блок
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);
}


Есть у кого-то какие-то идеи?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.