Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизПоистине ламерский вопрос о типе "file of TXRecord" Найти похожие ветки
← →
Alexey (AZ) (2007-03-30 20:51) [0]Доброго компелирования!
Возник вопросик всвязи с использованием рудиментов от паскаля... Есть тип "филе оф ТДата" и работаю я с ним ч/зAssignFile, Reset, Rewrite, Seek
и т.п. Вопрос здесь вот в чем: как бы проверить открыт ли файл, можно ли его ещё раз Assign... И было бы особо приятно делать system.CloseFile только в том случае, если "филе" ассигнуто :) если есть такая функция проверки, то было бы классно, ато сasm ... end;
приходится выкручиваться.
← →
Belorus © (2007-03-30 23:15) [1]Расскажи пожалуйста, как ты с asm... end; выкручиваешься ?
← →
_Аноним (2007-03-30 23:43) [2]зачем такие выкрутасы? почему не пользовать более современные методы?
Расскажите, пожалуйста
← →
DrPass © (2007-03-30 23:57) [3]
> И было бы особо приятно делать system.CloseFile только в
> том случае, если "филе" ассигнуто :)
Если филе ассигнуто, то клозефиле делать не нужно. Клозефиле нужно делать только если филе ресетнуто, ревритнуто или аппенднуто
← →
Германн © (2007-03-31 00:17) [4]
> аппенднуто
Никто, никогда ещё не смог аппенднуть филе оф ТДата :)
← →
DrPass © (2007-03-31 01:15) [5]
> Германн © (31.03.07 00:17) [4]
В мире ваще много парадоксов
← →
Palladin © (2007-03-31 01:35) [6]
> Германн © (31.03.07 00:17) [4]
если не смог аппендуть филе оф ТДата, то ревритнуть тем паче :)
у натУре... мир жесток...
← →
Германн © (2007-03-31 02:19) [7]
> Palladin © (31.03.07 01:35) [6]
>
>
> > Германн © (31.03.07 00:17) [4]
>
> если не смог аппендуть филе оф ТДата, то ревритнуть тем
> паче :)
> у натУре... мир жесток...
>
Не понял, пппоясни. :)
← →
Alexey (AZ) (2007-03-31 12:21) [8]
> Расскажи пожалуйста, как ты с asm... end; выкручиваешься
> ?
Задача заключается в сравнеии хэндлов файлов, т.к. в контексте одного процесса не может быть два раза открыт один и тот же объект (файл) под одним хэндлом. Если наше филе открыто, то у нас есть его хендл. Филе закрываем - хендл освобождается и он же самый может быть выдан этому филе при следующем открытии (не всегда к сожалению).
Допустим есть класс, описан так и нам нужно найти хэндл нашего филе:
private
f : file of TXData
LastH : dword
...
Определив смещение f и LastH от начала структуры класса, можно набросать кодик:
procedure ТМегаКлас.КлозеФиле;
var
resb : boolean;
begin
asm
MOV EDX, DWORD PTR DS:[EBX+$38]
XOR EAX, EAX
XOR EDX, [EBX+$184]
SETNZ AL
MOV EDX, DWORD PTR DS:[EBX+$38]
MOV [EBX+$184], EDX
MOV resb, AL
end;
if resb then
System.CloseFile(f);
end;
В моем случае по смещению $38 находится f, что есть кстати говоря обычная структура, содержащая параметры открытия филе и его хэндл (у нас рукастое филе). А по смещению $148 находится LastH. Смещения - константы.
Т.к. если наше филе не было открыто, то бульён resb это будет знать и наше филе не будет закрыто :) Так может есть здесь человеческие функции проверки на открытость филе?
try...except стараюсь избегать, т.к. это лишние SEH.
← →
Alexey (AZ) (2007-03-31 12:22) [9]
> филе не будет закрыто
Соотв. не будет и ошибки.
← →
app © (2007-03-31 12:50) [10]> Alexey (AZ) (31.03.2007 12:21:08) [8]
С главной страницы форумов
Еще не хотелось бы видеть открытого коверканья русского языка, использования уличного сленга. Это конечно не наказуемо, но помните, что Ваши слова будут читать люди, которые с ними могут быть незнакомы, или они им просто неприятны.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.055 c