Терминал падает от dll. Что делать?

 

Функция из dll на cрр

MT4_EXPFUNC char* __stdcall GetFromMemory(){
 
    WaitForSingleObject(hSem, INFINITE);
 
 
    pBuf = (LPTSTR) MapViewOfFile(hMapFile,FILE_MAP_READ,0,0,BUF_SIZE);                   
 
        if (pBuf == NULL){ 
            ReleaseMutex(hSem);
            return "-1";
        }
 
 
 
    char*RetBuf;
    RetBuf=(char*)pBuf;
 
    UnmapViewOfFile(pBuf);
 
    ReleaseMutex(hSem);
 
    return RetBuf;
}

Терминал падает от нее на возврате значения.

Call stack  :
00455590:0023 [004555B3] ?SetReturnedString@CExpertInterior

Кто знает что делать? Как правильно вернуть строку?

 
Из DLL нельзя так через return RetBuf; возвращать строки.

Мало того, в RetBuf присваивается кусок замапленного файла, а потом этот кусок памяти некорректен, так как файл размаплен. При попытке доступа к невалидной памяти конечно же все упадет.
 
Ура! Получилось:-)
Причина обращения: