Как сделать калькулятор в Delphi?

Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.

Как Delphi реализует многоплатформенную разработку?

Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...

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

Советы » DLL » Закрытие файла, открытого в 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

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2024 - All Rights Reserved - www.delphirus.com