Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

Как сделать, чтобы программа работала под DOS?   Найти похожие ветки 

 
Шишкин Илья ©   (2003-06-10 13:38) [0]

Как сделать программу, которая могла бы работать под DOS?


 
Digitman ©   (2003-06-10 13:40) [1]

в среде Делфи - никак


 
Михайлов Антон ©   (2003-06-10 13:56) [2]

Запускаешь Borland Pascal и пишишь программу... она будет работать под Dos :)


 
Apok ©   (2003-06-15 16:48) [3]

Borland Pascal и пиши программу.


 
Anatoly Podgoretsky ©   (2003-06-15 17:08) [4]

В соответсвии со спецификацией ДОС и соответствующим компилятором.


 
Shluz ©   (2003-06-15 20:39) [5]

:)))))))
я здесь не один начинающий :))) рад!!


 
Knight ©   (2003-06-16 00:07) [6]

>> Digitman © (10.06.03 13:40)
> в среде Делфи - никак

А в чём можно? Как ScanDisk, например... что-то, где-то, слышал... но может кто по-подробнее знает или пошлёт куда конкретно... :)


 
Palladin ©   (2003-06-16 00:30) [7]

два раза уже сказали чем можно, все равно не вьезжает народ


 
DrPass ©   (2003-06-16 00:38) [8]

Круче всего набивать СОМ-файл в Блокноте


 
Knight ©   (2003-06-16 01:16) [9]

А как объединить Дос код с Вин?


 
Palladin ©   (2003-06-16 01:25) [10]

Knight, вот тут ты сморозил фразу явно для орешника...


 
Knight ©   (2003-06-16 01:32) [11]

И ешё раз сморожу... Ж)

Как сделать, чтобы под Досом выполнялась Дос0составляющая програамы, а под Виндами бало нормальное Вин-Приложение? :)


 
Andrews ©   (2003-06-16 01:38) [12]

> Шишкин Илья ©, Knight ©

А вы случайно не консольное приложение имеете ввиду?


 
Knight ©   (2003-06-16 01:44) [13]

>> Andrews © (16.06.03 01:38)
нет... консольное под голым Досом не пойдёт.


 
Palladin ©   (2003-06-16 01:51) [14]

ну вот, если подробней то все стало ясно, имхо могу только сказать что такое возможно, но как это сделать точно не уверен...
в делфях точно не получится, на сях может быть...


 
Andrews ©   (2003-06-16 01:55) [15]

>> Knight © (16.06.03 01:44)

Зато досовское под w9x пойдет в 99% случаев :o)


 
Knight ©   (2003-06-16 02:04) [16]

>> Palladin © (16.06.03 01:51)
А я и первый раз довольно ясно сказал :)


 
Andrews ©   (2003-06-16 02:14) [17]

Через ..., можно сделать так

programa.bat

@echo off
win_prg.exe > nil
if errorlevel goto label1 //если конечно вин программа возвращает код завершения
dos_prg.exe
label1:

В написании команд мог напутать, давненько я "батники" не писал :o), но идея думаю понятна, хотя решение далеко не "элегантное", да и мелькане черных прямоугольников на экране под win, не добавит эстетики... :o)


 
Knight ©   (2003-06-16 03:20) [18]

>> Andrews © (16.06.03 02:14)

Еще предложи разместить в одном каталоге:
dos_prg.exe, win31_prg.exe, win9x_prg.exe, winXP_prg.exe и др.
типа, пользователь не дурак, сам разберётся по названию, что ему запустить... :)

>> All
Подробных объяснений можно не давать все-равно едва ли пригодиться, просто теоретически интересно... :)

Я понимаю так, что там где программа обычно адресуется на вывод строки типа: "This program requires Microsoft Windows", "This program cannot be run in DOS mode" и т.п. идет переадресация на участок кода ориентированного на DOS.


 
(зашита от спама, кто надо узнает)   (2003-06-16 08:29) [19]

Knight © (16.06.03 03:20)
>... идет переадресация на участок кода ориентированного на DOS.

так и есть только наоборот, переадресация идет с доса на виндовый участок. достаточно почитать как устроен заголовок exe файла под винды, чтобы стало понятно. заголовок сложный (гораздо сложнее чем DOS) и включает в себя программу под дос (она первой стоит).
так что теоретически чтобы и под DOS и под Win-дами работало нужно самому слинковать 2 программы, на место досовского заголовка вставить свою. естественно придется мудрить с переадресацией и свою дос прогу "учить" переадресовыватся на виндовый модуль.

все чисто теоретически... и со скидкой на то что уже забыл, интересовался этим очень давно еще когда на асме писал по дос и виндовс только только появилась.

p.s. возможно у дос проги должен быть ограничен размер. точно не скажу, но там помоему короткий джамп (в пределах одного сегмента, что накладывает ограничения) возможно и программа должна быть в формате COM. (все надо проверять и читать об этом по новой)


 
KSergey ©   (2003-06-16 09:02) [20]

Не знаю как это сделать в дельфи, в Borland C++ 3.1 при написании def (вроде) файла проекта можно указывать какую программу (буквально exe-файл) пихать в упомянутую тов. (зашита от спама, кто надо узнает) (16.06.03 08:29) DOS-часть.
Можно попробовать поискать какой файл ложит Delphi при линковке (вероятно, он где-то лежит) и его подменить. (Я сомневаюсь что это программа вшита как данные в линкер).


 
PVOzerski ©   (2003-06-16 11:29) [21]

1) Если не стоит задача dual-mode - ищите бесплатный экстендер wdosx - он "переделывает" win32-приложения под DOS (на самом деле, пришивает свой загрузчик+эмулятор WinAPI. Либо берите DOS-овский компилятор (из 32-разрядных приходят на ум FreePascal и TMT).
2) Если dual-mode - можно попробовать поиздеваться над приложением иначе. Найти какую-нибудь утилиту для замены DOS-stub"а в PECOFF и пришить загрузчик экстендера 32RTM.EXE/dpmi32vm.ovl (имеются в некоторых Борландовских продуктах).

Естественно, набор WinAPI-функций, эмулируемых экстендерами, весьма ограничен, о GUI, реализованном с их помощью, забудьте.

Еще вариант - через прерывания DOS выяснять из DOS-программы наличие Windows и, при необходимости, запускать Win-программу (этот путь мало пригоден для NT). А вот если загрузчик DOS-программы сделать DOS-stub"ом для win-программы... Главное - найти или сделать утилиту для замены stub"а.


 
DrPass ©   (2003-06-16 11:55) [22]

>Knigth

> Я понимаю так, что там где программа обычно адресуется на
> вывод строки типа: "This program requires Microsoft Windows",
> "This program cannot be run in DOS mode" и т.п. идет переадресация
> на участок кода ориентированного на DOS

Просто РЕ-файлу полагается иметь два заголовка, обычный MZ и виндовый PE. DOS обращается к первому, не подозревая о существовании второго, и видит только программку, которая выдает оное сообщение, тут же завершая работу. А винда находит РЕ-заголовок, и работает, как с РЕ-файлом.
Так что теоретически можно создать и кроссплатформенную программу, включающую как Windows, так и DOS-версии в одном файле. Но кому нужен этот гемор? Разве что для науки...


 
Knight ©   (2003-06-16 12:38) [23]

Спасибо всем, этот принцип понятен :)

Если можно использую эту тему ещё для одного вопроса...
Можно ли работать из под ДОС с длинными именами, или хотя бы копировать, переименовывать без их "укорачивания"?


 
DrPass ©   (2003-06-16 13:49) [24]

Можно. Но только через прямое обращение к диску или драйвер. Длинные имена хранятся в тех же дисковых структурах, только DOS их игнорирует



Страницы: 1 вся ветка

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.02 c
4-7752
demonyator
2003-05-01 03:15
2003.07.03
Глобальный ActivateKeyboardLayout в Windows XP.


4-7763
BJValentine
2003-04-29 17:43
2003.07.03
DeleteFile


14-7702
gn
2003-06-17 13:12
2003.07.03
*.tbl


14-7692
Knight
2003-06-14 09:59
2003.07.03
Как Алиса Селезнёва перемещалась во времени?


1-7406
LinOS
2003-06-23 06:33
2003.07.03
В ListBox хочу выделять Item правой кнопкой мыши.