компиляция программы для выполнения в режиме DOS

Я пишу простую программу, для выполнения в режиме DOS. Все работает под эмулированной консолью в XP Победы / Vista / Семь, но не в DOS. Ошибка говорит: this program caonnot be run in DOS mode. Интересно то, что проблема с флагами компилятора или чем-то большим.

Для программирования я использую Код:: блоки v 8.02 с такими настройками для компиляции:

- Стена-W - педантичный - педантичные ошибки

в Проекте \опции Build \Параметры компилятора

Я попробовал чистый режим DOS, загружающийся от CD и также настраивающий DOS в Виртуальной машине. Та же ошибка появляется.

Я должен включить еще некоторые флаги компилятора? Некоторые определенные 386 / 486 оптимизации?

ОБНОВЛЕНИЕ

Хорошо, я загрузил, установил и настроил DJGPP. Даже разрешенный некоторые проблемы с освобождают и включают. Все еще имейте два вопроса.

1) я не могу скомпилировать код, который звонит _strdate и _strtime, я проверил включение дважды, поскольку MSDN заявляет, что ей нужно time.h, но все еще ошибка говорит: _strdate was not declared in this scope, я даже пытался добавить станд.:: _strdate, но тогда я имею 4, не 2 ошибки sazing то же

2) 2-й код о gotoxy, похоже что:

#include <windows.h>

void gotoxy(int x, int y)
{
  COORD position;
  position.X = x; position.Y = y;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}

ошибка говорит, что нет никакого windows.h, таким образом, я поместил ее на месте, но тогда существует намного больше ошибок при высказывании, что некоторые отсутствуют в windows.h, я ПРЕДПОЛОЖИМ, что она не будет работать, потому что это функционирует, строго для права окон? есть ли любой способ записать подобный gotoxy для DOS?

UPDATE2

1) решенное использование time(); вместо _strdate(); и _strtime(); вот код

time_t rawtime;
struct tm * timeinfo;
char buffer [20];

time ( &rawtime );
timeinfo = localtime ( &rawtime );

strftime (buffer,80,"%Y.%m.%d %H:%M:%S\0",timeinfo);
string myTime(buffer);

Это теперь компилирует под DJGPP.

UPDATE3

Все еще потребность решить использование кода gotoxy - замененный это некоторым другим кодом, который компилирует (под DJGPP).

Спасибо всем за справку. Просто изученный некоторые новые вещи о компиляции (флаги, старый IDE как DJGPP, OpenWatcom) и обновленная установка DOS памятей для работы:-)

9
задан Krzysztof Szynter 15 January 2010 в 13:04
поделиться

7 ответов

Да, литерал - это значение, выраженное в исходном коде. В то время как VB поддерживает литералы даты/времени и XML, C # - нет.

Из спецификации C # раздел 2,4,4:

Литерал является исходным кодом представление значения.

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

Литерал, о котором никто еще не упоминал null по пути...

Он также не связан с примитивными типами - от Type.IsPrimitive :

Примитивные типы являются булевыми, байтовыми, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Двойная и одиночная.

... спецификация C # фактически не определяет идею «примитивного» типа, но обратите внимание, что Последовательность отсутствует в списке выше.

В терминах литералов быть константы времени компиляции... в C # каждый литерал имеет представление, которое может быть запечено непосредственно в сборке; дополнительные литералы в VB означают, что они не являются константами, как их понимает CLR - например, нельзя использовать const DateTime - но они все еще являются литералами.

-121--2805580-

Вне интереса, использовать Список < строка > ? Поскольку в .net 3,5 SP1 можно использовать метод HashSet и метод HashWith . Насколько я понимаю, HashSets специально оптимизированы для сравнения двух наборов.

-121--2433209-

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

Чтобы скомпилировать программу для запуска на реальном DOS, вам нужно найти (вероятно, действительно старый) компилятор и (особенно) компоновщик, который нацелен на DOS и может создавать исполняемые файлы DOS MZ. Последним компилятором Microsoft, предназначенным для MS-DOS, был VC++ 1.52c. Если память служит, Борланд продолжал нацеливаться на DOS несколько позже, через что-то вроде Broland C++ 5 или около того.

Я полагаю, что если вы проверите веб-сайт Digital Mars, он все еще может иметь компилятор C++, который нацелен на DOS. Иначе ты застрянешь, ища что-то подержанное и довольно старое.

Редактирование: просмотр других ответов напомнил мне о DJGPP и OpenWatcom. Приношу извинения за то, что не упомянул их ранее.

Помните, что с точки зрения C++, Borland и Microsoft действительно старые компиляторы - они вообще не делают пространства имен, а поддержка шаблонов варьируется от несуществующей в компиляторе Microsoft до посредственной в Borland's. DJGPP в основном является удлинителем DOS, к которому был портирован gcc; степень, в которой она устарела (или является современной), будет зависеть от того, какая версия gcc задействована. Компилятор Digital Mars несколько современнее, чем Borland, если я не ошибаюсь, но Уолтер Брайт теперь тратит большую часть времени на работу над D вместо C++, так что компилятор C++ на самом деле не конкурирует с gcc, или MSVC, не говоря уже о чем-то вроде Comeau или Intel, который основан на фронтэнде EDG.

7
ответ дан 4 December 2019 в 13:47
поделиться

Ничего в силовых силах Луси.

Если вы ищете на поле «Фреда», а не все документы «Фреда», «Этот поиск не найдет Fredless Docs.

-121--3894557-

Я был использован для использования DJGPP для компиляции вещей в рамках домашней страницы MS-DOS. .

Это полный бесплатный компилятор, который все еще должен работать без проблем!

1
ответ дан 4 December 2019 в 13:47
поделиться

Вы хотите сказать вашему компилятору предназначаться для DOS. Я не знаю, как сделать это, извините, но возможно это будет служить подсказкой для поиска с помощью Google...

Рассмотрение Кода:: веб-сайт Блоков, кажется, что ваш IDE может поддерживать различные компиляторы (GCC, MSVC ++ и другие). Таким образом, сначала, фигура, какой компилятор вы используете. Затем проверить ту документацию компиляторов.

, После того как вы знаете, какой компилятор вы используете, затем можно перефразировать (совершенствовали) вопрос - я уверен, что кто-то здесь на stackoverflow будет знать.

Согласно этот поток , это кажется Открыть Watcom] 2 , компилятор предназначается для DOS. Кроме того, это поддерживается вашим IDE (Код:: Блоки).

Удачи!

0
ответ дан 4 December 2019 в 13:47
поделиться

В Win32 есть заголовок DOS STUB в Win32, который отображает это сообщение при запуске на чистом DOS. Вы должны составить его с помощью компилятора DOS E.g Turbo C или предоставлять целевую таблицу Plateform, если DOS среди них в том случае, если код кода. Это программное обеспечение, а не аппаратная платформа.

0
ответ дан 4 December 2019 в 13:47
поделиться

Попробуйте использовать этот код.

 private void call(String number) {
    try {
    platformRequest("tel:" + number);
    } catch (ConnectionNotFoundException ex) {
    // TODO: Exception handling
    }
    }
-121--4817934-

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

Блочные шифры обычно имеют фиксированный размер блока, например, 64 или 128 битов. Но шифрование с сохранением формата позволяет взять стандартный шифр типа AES и сделать шифр меньшей ширины, любого радиуса и ширины (например, radix 10, width 9 для параметров вопроса), с алгоритмом, который по-прежнему криптографически надежен.

Гарантированно никогда не будет конфликтов (потому что криптографические алгоритмы создают сопоставление 1:1). Это также обратимо (двустороннее отображение), поэтому можно взять результирующее число и вернуться к значению счетчика, с которого было начато.

AES-FFX является одним из предлагаемых стандартных методов для достижения этой цели.

Я экспериментировал с некоторым основным кодом Python для AES-FFX-- см. здесь код Python (но обратите внимание, что он не полностью соответствует спецификации AES-FFX). Он может, например, шифровать счетчик для случайного 7-значного десятичного числа. Например:

0000000   0731134
0000001   6161064
0000002   8899846
0000003   9575678
0000004   3030773
0000005   2748859
0000006   5127539
0000007   1372978
0000008   3830458
0000009   7628602
0000010   6643859
0000011   2563651
0000012   9522955
0000013   9286113
0000014   5543492
0000015   3230955
...       ...

Другой пример в Python, используя другой метод не-AES-FFX (я думаю), см. этот блог «Как создать номер учетной записи» , который делает FPE с помощью шифра Фейстеля. Он генерирует числа от 0 до 2 ^ 32-1.

-121--1210164-

Можно использовать gotoxy из заголовка conio.h , поставляемого с DJGPP.

1
ответ дан 4 December 2019 в 13:47
поделиться

Имеет взгляд: MINGW Компиляция MS DOS

в основном, используйте DJCPP в качестве задней части к коду :: Blocks.

2
ответ дан 4 December 2019 в 13:47
поделиться

То, что вы называете "эмулируемой консолью", не имеет никакого отношения к эмуляции или DOS. Вероятно, вы все еще генерируете 32/64-битные исполняемые файлы Windows, просто используя консольную подсистему.

Начните с замены компилятора на компилятор, способный генерировать 16-битный код. Я уверен, что OpenWatcom все еще поддерживает 16-битную MZ цель из коробки. IIRC DJGPP тоже, но я не уверен и не знаю, поддерживается ли он до сих пор.

Правка: о готокси , можно:

  1. Использовать PDCurses и не заботиться о том, что используется внутри (я думаю, это INT10, однако)
  2. Использовать прерывание 0x10 самостоятельно
  3. Записать непосредственно в VGA-память на 0xB8000

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

3
ответ дан 4 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: