Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
CD-ROM [11]
DLL и PlugIns [75]
Help файлы [20]
INI файлы [16]
RS232 [2]
Активные директории [1]
Директории [0]
Диски [0]
Корзина [5]
Порты [26]
Ресурсы [0]
Файлы [0]
Форматы файлов [15]
Ярлыки [0]

Наш опрос
Оцените мой сайт
Всего ответов: 30

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Файловая система » DLL и PlugIns

Закрытие файла, открытого в DLL

Как мне закрыть файл, открытый в DLL (созданный в Delphi), и вызванный из VB?

Это известная проблема. Это происходит от того, что VB закрывает при запуске 5 стандартных DOS-дескрипторов (0..4). Так, программа, открывшая файл, повторно использует один из этих дескрипторов, чтобы первой открыть файл с локального файла. Проблемы при использовании файла не возникает, но паскалевская процедура Close использует характеристику "безопасной" работы: она отказывается закрывать файл, если он имеет один из стандартных дексрипторов! Такая функциональность хороша под DOS, но в нашей ситуации файл, открытый DLL никогда не закроется, даже если DLL завершит свою работу! VC++, очевидно, менее закомплексован в данном вопросе, и поэтому закрывает стандартный дескриптор.

Но вы сами можете решить эту проблему. Вместо использования паскалевских методов Close/CloseFile для закрытия файла в DLL, вы можете использовать следующее:


Procedure ReallyCloseFileVar(Var F); Assembler;
{ F должен иметь тип File }
Asm
les bx, F
{ сохраняем F в es:bx }
mov bx, word ptr es:[bx] { сохраняем дескриптор в bx }
mov ah, $3E { функция 3Eh аналогична закрытию файла }
call Dos3Call { задействуем прерывание int 21h }
End;


Procedure ReallyCloseFileHandle(FileHandle: word); assembler;
{ FileHandle - дескриптор DOS-файла }
asm
mov bx, Handle
{ сохраняем дескриптор в bx }
mov ah, $3E { функция 3Eh аналогична закрытию файла }
call DOS3Call { задействуем прерывание int 21h }
end;
Категория: DLL и PlugIns | Добавил: Skinner (06.07.2008)
Просмотров: 362 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2025 Хостинг от uCoz