Подскажите пожалуйста как в паскале прочитать exe файл и переписать его в другое место.
В целом мне необходимо написать программу пересылки файла через com порт с одного компа на другой, был бы рад получить ответ хотя бы на 1-ю часть вопроса
Работа с exe файлами на pascal'e.
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Прочитать файл (не обязательно exe) при помощи функций Assign, Reset, BlockRead.
Примерно так:
Примерно так:
Код: Выделить всё
var F : file;
acBuf : array [0..4000-1] of byte;
wRead : word;
begin
assign (F, 'filename.ext');
reset (F, 1);
while (NOT Eof (F)) do
begin
BlockRead (F, acBuf, Sizeof (acBuf), wRead);
{ Прочитано wRead байт }
..............
do something
..............
end;
close (F);
end.
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
StrangeR, StrangeR,
а зачем его чиать?
его надо просто передать по порту
а зачем его чиать?
его надо просто передать по порту
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Рекомендую использовать спецификацию Int 14H по COM порту:
14H 00H Initialize Communications Port
14H 01H Write Character to Communications Port
14H 02H Read Character from Communications Port
14H 03H Get Communications Port Status
14H 04H Extended Initialize Communications Port
14H 05H Extended Communications Port Control
Используя листинг BBB, добавляем после Blockread :
Далее ...
И не забыть сделать Initialize COM порта перед работой с ним - вот в общем и все:
Input
-----------------------------
AH=00H
AL=initialization parameter
DX=communications port number
(0=COM1, 1=COM2, etc.)
Output
-----------------------------
AH=port status
Bit(s) Significance (if set)
----------------------
7 timed-out
6 transmit shift register empty
5 transmit holding register empty
4 break detected
3 framing error detected
2 parity error detected
1 overrun error detected
0 receive data ready
AL=modem status
Bit(s) Significance (if set)
------ ----------------------
7 receive line signal detect
6 ring indicator
5 data-set-ready
4 clear-to-send
3 change in receive line
signal detect
2 trailing edge ring indicator
1 change in data-set-ready status
0 change in clear-to-send status
14H 00H Initialize Communications Port
14H 01H Write Character to Communications Port
14H 02H Read Character from Communications Port
14H 03H Get Communications Port Status
14H 04H Extended Initialize Communications Port
14H 05H Extended Communications Port Control
Используя листинг BBB, добавляем после Blockread :
For I := 0 to wRead-1 do SendChar(acBuf);
Далее ...
Procedure SendChar(aChar:Byte);
begin
asm
mov ah, 01h
mov al, aChar
mov dx, 1 { COM2 number }
int 14H
test ah, 80H
jnz @no_error
.....
something
.....
@no_error:
end;
end;
И не забыть сделать Initialize COM порта перед работой с ним - вот в общем и все:
Input
-----------------------------
AH=00H
AL=initialization parameter
DX=communications port number
(0=COM1, 1=COM2, etc.)
Output
-----------------------------
AH=port status
Bit(s) Significance (if set)
----------------------
7 timed-out
6 transmit shift register empty
5 transmit holding register empty
4 break detected
3 framing error detected
2 parity error detected
1 overrun error detected
0 receive data ready
AL=modem status
Bit(s) Significance (if set)
------ ----------------------
7 receive line signal detect
6 ring indicator
5 data-set-ready
4 clear-to-send
3 change in receive line
signal detect
2 trailing edge ring indicator
1 change in data-set-ready status
0 change in clear-to-send status
я вроде разобрался с этим, всем спасибо за советы.