Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Где дос ??


Автор: DigitSphinx 3.6.2007, 01:32
я не профи smile поэтому есть некоторые непонятки
На VS2005 открываю новый пустой проект и пишу
Код

#include <stdio.h>
void main()
{
       printf_s("TEST");
}

Если открыть release exe’шника (5,50 КБ) в16-ом редактором, то видно где-то в начале файла “This program cannot be run in DOS mode.” (как я понял это MZ заголовок)
Т.е. прога не будет работать на чистом ДОСе ! хотя я подключил только stdio.h !!!
Вопрос №1: Почему ??
далее
В конце exe’шника XML код, открываю project->properties->linker->generate manifest -> NO
Пытаюсь запустить и получаю такую ошибку:
”Приложению не удалось запустится, поскольку MSVCR80.dll не был найден. Повторная установка приложения может исправть проблему”
Вопрос № 2: Почему ??

просто хочется написать прогу под чистый ДОС которая выводит сообщение на экран
перезагрузить комп с дискеты и запустить прогу и полюбоваться на это !!  smile 

Автор: archimed7592 3.6.2007, 01:36
во-первых не printf_s, а printf, если хочешь, чтобы работало везде...
Цитата(DigitSphinx @  3.6.2007,  01:32 Найти цитируемый пост)
Вопрос №1: Почему ??
потому, что ты собрал её под windows... ты же не удивишься, если ты соберёшь это под linux в виде elf(к примеру) и это потом не будет работать под досом smile
перекомпилируй под досом соответствующим компилятором и всё отлично запустится(если не исправишь на printf, то, даже не скомпилируется)

Цитата(DigitSphinx @  3.6.2007,  01:32 Найти цитируемый пост)
Вопрос № 2: Почему ??
точно не знаю, но у студии такое бывает и без отключения манифеста... мож попробовать изменить RTL на MT-static - мне это помогало

Автор: Fazil6 3.6.2007, 01:40
Цитата(DigitSphinx @  3.6.2007,  01:32 Найти цитируемый пост)
Вопрос №1: Почему ??

потому что компилятор создает exe для windows , а не DOS. Что ты включаешь в свой проект значения не имеет. Имеет значение то, что ты создаешь проект Win32
Цитата(DigitSphinx @  3.6.2007,  01:32 Найти цитируемый пост)
Вопрос № 2: Почему ??

потому, что твоему приложению нужна эта библиотека.

Добавлено через 2 минуты и 51 секунду
Цитата(archimed7592 @  3.6.2007,  01:36 Найти цитируемый пост)
точно не знаю, но у студии такое бывает и без отключения манифеста... мож попробовать изменить RTL на MT-static - мне это помогало

причем здесь манифест? Это CRT для Multithreaded, dynamic link 

Автор: DigitSphinx 3.6.2007, 01:53
Цитата(archimed7592 @  3.6.2007,  01:36 Найти цитируемый пост)
 ты же не удивишься, если ты соберёшь это под linux в виде elf(к примеру) и это потом не будет работать под досом 
  smile 
Цитата(archimed7592 @  3.6.2007,  01:36 Найти цитируемый пост)
потому, что ты собрал её под windows

Цитата(Fazil6 @  3.6.2007,  01:40 Найти цитируемый пост)
потому что компилятор создает exe для windows

а выбирать можно только из 4-х платформ 
“Pocket PC 2003”, “Smartphone 2003”, “x64” и “Win32”

Цитата(archimed7592 @  3.6.2007,  01:36 Найти цитируемый пост)
во-первых не printf_s, а printf, если хочешь, чтобы работало везде...

VS 2005 выдает warning что лучше первый вариант , я не думал что это может как-то повлиять потому-то это дело компилятора как перевести в машинный код если ему не нравится pfintf то ради бога будет ему printf_s

Вот … и спасибо ребята за ответы ))

P.S. А вот еще , в состав VS 2005 не входит никаких С++ компиляторов для ДОСа ?

Автор: archimed7592 3.6.2007, 01:55
Цитата(Fazil6 @  3.6.2007,  01:40 Найти цитируемый пост)
причем здесь манифест? Это CRT для Multithreaded, dynamic link  

Fazil6, поверь, бывают у студии такие глюки... по крайней мере у vc-8.0-sp0 бывали... не на одном компе, не у одного человека... у меня тоже было... поверь, ни с хера появлялся такой глюк. ругался на то, что нету дллки, которая лежала в %systemroot%\system32. смена RTL на static версию помогала.

Добавлено через 1 минуту и 50 секунд
Цитата(DigitSphinx @  3.6.2007,  01:53 Найти цитируемый пост)
VS 2005 выдает warning что лучше первый вариант , я не думал что это может как-то повлиять потому-то это дело компилятора как перевести в машинный код если ему не нравится pfintf то ради бога будет ему printf_s

если пишешь прогу для доса(и вообще для чего-нибудь, что придётся компилить не только в студии), то ОЧЕНЬ рекомендую наплевать на эти варнинги... если они очень раздражают, то добавить в код define, который указан в варнинге, чтобы не ругалось

Автор: Fazil6 3.6.2007, 02:07
Цитата(archimed7592 @  3.6.2007,  01:55 Найти цитируемый пост)
смена RTL на static версию помогала.

да хтоб сомневался...

Автор: DigitSphinx 3.6.2007, 02:07
в состав VS 2005 не входит никаких С++ компиляторов для ДОСа ?

Автор: archimed7592 3.6.2007, 02:09
Цитата(DigitSphinx @  3.6.2007,  01:53 Найти цитируемый пост)
А вот еще , в состав VS 2005 не входит никаких С++ компиляторов для ДОСа ?
насколько мне известно - нет, но, можно её заставить компилить используя другой компилятор(BC++, к примеру)

Цитата(Fazil6 @  3.6.2007,  02:07 Найти цитируемый пост)
да хтоб сомневался... 
 smile 

Автор: DigitSphinx 3.6.2007, 02:16
Цитата(Fazil6 @  3.6.2007,  02:07 Найти цитируемый пост)
смена RTL на static версию помогала.

Вы вообще о чем ?? smile 

Автор: nerezus 3.6.2007, 07:27
Цитата

в состав VS 2005 не входит никаких С++ компиляторов для ДОСа ?
  а зачем тебе под дос?

Под дос есть Borland C++, правда он кривой и с хреновой юзабилити.

P.S.  /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX} - доса походу нету. Ну и не нужен он, ща его место на компах заняла винда. Не так ли? )

Автор: DigitSphinx 3.6.2007, 12:04
Хорошо забудем про VS 2005 , открываю masm и пишу
Код

.386
.model flat, stdcall
.code
Main:
mov eax, 10
add eax, 3
mov ecx, eax
ret
end Main

компилирую , получаю exe’шник весом в 1 kB в котором тоже написанно “This program cannot be run in DOS mode.”
Опять почему ??

Автор: nerezus 3.6.2007, 12:15
DigitSphinx, так ты же под винду компилишь, не так ли? )

Автор: DigitSphinx 3.6.2007, 12:17
Ну да редактор визуальный , ну да не masm а masm32  smile 
Хорошо я сдаюсь как откомпилить по ДОС ?
И если откомпилить под ДОС в винде будет работать ?

Автор: Greeen 3.6.2007, 12:19
Цитата(DigitSphinx @  3.6.2007,  12:17 Найти цитируемый пост)
как откомпилить по ДОС ?

компилить досовским компилятором  smile 

Автор: DigitSphinx 3.6.2007, 12:21
Цитата(Greeen @  3.6.2007,  12:19 Найти цитируемый пост)
компилить досовским компилятором  smile   

каким ?? smile 

Автор: Greeen 3.6.2007, 12:25
Borland (Turbo) C++ 3
Watcom (было раньше)
Портированный под DOS GCC

Автор: DigitSphinx 3.6.2007, 12:29
А где можно скачать ?

Автор: Greeen 3.6.2007, 12:32
ну борландовский если хочешь могу на мыло выслать

Автор: DigitSphinx 3.6.2007, 12:37
давай digitsphinx(at)mail(dot)ru

Автор: Daevaorn 3.6.2007, 12:38
Цитата(DigitSphinx @  3.6.2007,  13:29 Найти цитируемый пост)
А где можно скачать ?

google знает

Автор: Greeen 3.6.2007, 12:43
А вот еще нашел компилятор под DOS: SPHINX C--

Автор: DigitSphinx 3.6.2007, 12:43
Я скачал GCC откомпилил 
Код

#include <stdio.h>
int main()
{
       printf("TEST");
     return 0;
}

Получил exe’шник 14.5kb и тоже под винду !!!

Автор: Greeen 3.6.2007, 12:47
DigitSphinx, отправил борланд.
http://www.delorie.com/djgpp/

Автор: DigitSphinx 3.6.2007, 12:50
спс огромное

Автор: Greeen 3.6.2007, 12:52
you're welcome  smile 

Автор: DigitSphinx 3.6.2007, 13:05
Прога в 14,5kb но без этой надписи ! “This program cannot be run in DOS mode.”
Уууу у меня чуть не начился комплекс неполноценности !
Спасибо всем, особенно Greeen smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)