Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при удалении File Mapping [D6, Win95/98]


N ©   (2002-11-10 16:57:00) 

Здравствуйте.
Открываю файл, создаю два FileMapping, тут же особождаю их, в результате, при попытке закрыть файл, возникает ошибка "Неверный дескриптор", и файл остается занятым до следующей перезагрузки. Если содать только один FileMapping, то все нормально. Ни размер, мэппинга, ни изменение имени объекта не влияют на ситуацию. :(
Спасибо заранее.


procedure TForm1.Button1Click(Sender: TObject);
var
MyFile, FileMap1, FileMap2: THandle;

function CreateMapping: THandle;
begin
Result := CreateFileMapping(
MyFile, // handle to file to map
nil, // optional security attributes
PAGE_READWRITE, // protection for mapping object
0, // high-order 32 bits of object size
1024, // low-order 32 bits of object size
nil); // name of file-mapping object
end;
begin
MyFile := CreateFile(
"Test.bin", // file name
GENERIC_READ or GENERIC_WRITE, // access mode
0, // share mode
nil, // SD
OPEN_ALWAYS, // how to create
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_RANDOM_ACCESS, // file attributes
0); // handle to template file

FileMap1 := CreateMapping;
ShowMessage(SysErrorMessage(GetLastError));

FileMap2 := CreateMapping;
ShowMessage(SysErrorMessage(GetLastError));

CloseHandle(FileMap1);
ShowMessage(SysErrorMessage(GetLastError));

CloseHandle(FileMap2);
ShowMessage(SysErrorMessage(GetLastError));

CloseHandle(MyFile);
ShowMessage(SysErrorMessage(GetLastError));
end;


Cobalt   (2002-11-11 19:27:00) [1]

Дело в том, что у вас FileMap1 и FileMap2, скорее всего - одинаковые, ведь эти файлы - одно и тоже, и для одного АП у них должен быть один и тот же Handle. Если же вам надо обращаться к одному файлу через несколько "ручек", то смотрите ф-ию DuplicateHandle
P.S. кстати, после какого закрытия выдаются ошибки?


Наверх

Титульная страница Поиск, карта сайта Написать письмо