Проблема с ReadFile в СОМ
От: DT  
Дата: 31.01.02 14:02
Оценка:
Непонятная закавыка — при вызове ReadFile (COM-клиент на VB) в нижеприведенном методе происходит неожиданное завершение работы клиента (если сконфигурировать в Release) или выдается сообщение "Debug assertion failed!" c комментарием "_CrtIsValidHeapPointer(pUserData)" в файле dbgheap.c (если сконфигурировать в Debug), которого, кстати, на моей машине в принципе нет. Причем последнее сообщение появляется при освобождении памяти из-под буфера free (buffer), а если эту строчку убрать, то происходит то же самое, что и в Release. Если закомментировать ReadFile, ошибка исчезает, но и необходимые функции тоже. Что делать?

STDMETHODIMP CActiveXTest::LoadFromFile(BSTR FileName)
{
USES_CONVERSION;
DWORD Len = ::SysStringLen(FileName) + 2;
DWORD NoB = 0;
char *buff;
buff = (char*)malloc(Len);

buff = W2A(FileName);

HANDLE hFile = ::CreateFile(LPCTSTR(buff), GENERIC_READ, FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, "Invalid file name!", "ERROR!", MB_OK);
return E_FAIL;
}
free(buff);

Len = GetFileSize(hFile, NULL);
char *buffer = new char [Len + 1];

::SetFilePointer(hFile,0,NULL,FILE_BEGIN);
::ReadFile(hFile, &buffer, Len, &NoB, NULL);

m_bstrBody = A2BSTR(buffer);

free(buffer);
::CloseHandle(hFile);

return S_OK;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.