Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не могу откомпилировать модули из Borland C++ 3.1

16K
22 апреля 2006 года
Ефремов
5 / / 22.04.2006
Здравствуйте.

При компиляции файла с расширением С в среде Visual С++ 6.5
Получаю ошибку:
fatal error C1010: unexpected end of file while looking for precompiled header directive

модули перенесены из Borland C++ 3.1. ранее использовались в Dos версии.
Сейчас встала необходимость включить их в диалоговое приложение Windows.

Та же ошибка и при компиляции в консольном приложении без поддержки MFC

Помогите, кто может. В Visual C я новичок.

Заранее благодарен,
с уважением, Ефремов.
3
22 апреля 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Ефремов
Здравствуйте.

При компиляции файла с расширением С в среде Visual С++ 6.5
Получаю ошибку:
fatal error C1010: unexpected end of file while looking for precompiled header directive

модули перенесены из Borland C++ 3.1. ранее использовались в Dos версии.
Сейчас встала необходимость включить их в диалоговое приложение Windows.

Та же ошибка и при компиляции в консольном приложении без поддержки MFC

Помогите, кто может. В Visual C я новичок.

Заранее благодарен,
с уважением, Ефремов.


Ты используешь precompiled headers.
Два варианта решения проблемы:
1) отключить использование precompiled headers в настройках проекта;
2) вкоючить в начало всех *.c, *.cpp файлов заголовочный файл stdafx.h

16K
23 апреля 2006 года
Ефремов
5 / / 22.04.2006
Большое спасибо, Green.

[COLOR=blue]1) отключить использование precompiled headers в настройках проекта; [/COLOR]
Отлично сработало.
Я в VC новичок, если не затруднит, подскажите, для чего нужна эта опция – вроде все необходимые заголовки можно в исходном файле записать.

[COLOR=blue]2) включить в начало всех *.c, *.cpp файлов заголовочный файл stdafx.h [/COLOR]
Этот вариант не срабатывает, да он для меня не приемлем –исходники DOS должны оставаться в неизменном виде.

Еще раз СПАСИБО,
С уважением, Ефремов.
284
25 апреля 2006 года
michael_is_98
587 / / 25.02.2005
Цитата:
Originally posted by Ефремов
Большое спасибо, Green.

[COLOR=blue]1) отключить использование precompiled headers в настройках проекта; [/COLOR]
Отлично сработало.
Я в VC новичок, если не затруднит, подскажите, для чего нужна эта опция – вроде все необходимые заголовки можно в исходном файле записать.

[COLOR=blue]2) включить в начало всех *.c, *.cpp файлов заголовочный файл stdafx.h [/COLOR]
Этот вариант не срабатывает, да он для меня не приемлем –исходники DOS должны оставаться в неизменном виде.

Еще раз СПАСИБО,
С уважением, Ефремов.


Нужно проверить заголовочные файлы. Некоторые из них (вроде <except.h>,<conio.h>) отсутствуют в Visual C++ - это относится и к BGI.
Мне кажется, если пакет делает какие-либо сложные расчеты, стоит разделить его на вычислит. и интерфейсную части и переносить их отдельно. Первая перенесется легче, вторая зависит от среды разработки и ОС.

395
25 апреля 2006 года
RelB
367 / / 09.11.2002
Цитата:
Originally posted by Ефремов
Большое спасибо, Green.

[COLOR=blue]1) отключить использование precompiled headers в настройках проекта; [/COLOR]
Отлично сработало.
Я в VC новичок, если не затруднит, подскажите, для чего нужна эта опция – вроде все необходимые заголовки можно в исходном файле записать.


Эта опция в конечном счете не на что не влияет, но существенно ускоряет сборку проекта...
Представь, ты пишешь приложение под MFC. MFC - эдакий монстр с кучей определений и т.п. Понятно, что в каждый модуль (.cpp) должен знать об функциях и классах MFC. Представь, как бы все тормозно собиралось, если хидеры MFC включались бы в каждый модуль?? Для этого и существует stdafx.h, в него включаются все необходимые для всего приложения хидеры и он сам включается в каждый модуль... Теперь откомпилировав один раз stdafx.cpp мы имеем как-бы "откомпиленную приставку" для каждого модуля .сpp...

16K
25 апреля 2006 года
Ефремов
5 / / 22.04.2006
Здравствуйте.

Большое спасибо всем откликнувшимся.

С компиляцией становится понятно. Но возникла новая неожиданная проблема.
Все модули компилируются замечательно. Объектные файлы создаются. Но при линковании выдается сообщение:
Pages.obj : error LNK2001: unresolved external symbol "void __cdecl initd(void)" (?initd@@YAXXZ)

initd - модуль DOS и так на все имена из DOS-овских файлов.

Что я делал:
1) Посмотрел в map карте (построив без вызова initd()). Имена есть.

2) Включил принудительно в проект при линковании initd.obj (Setting/Link/input). Получил две ошибки:
INITD.OBJ : error LNK2005: _initd already defined in initd.obj
Pages.obj : error LNK2001: unresolved external symbol "void __cdecl initd(void)" (?initd@@YAXXZ)

3) перетащил объектные файлы в «левый» каталог и исключил все DOS модули из проекта. Естественно, указав путь линковщику. Все равно не разрешает ссылки (первая ошибка).

4) даже знак подчеркивания ставил в имени функции (я знаю, что компилятор ставит подчеркивание сам) – не помогло.

michael_is_98 писал:
[COLOR=blue]«Мне кажется, если пакет делает какие-либо сложные расчеты, стоит разделить его на вычислит. и интерфейсную части и переносить их отдельно.» [/COLOR]
Верно. интерфейсную часть DOS как раз и меняю. Весь интерфейс новый под Windows. От DOS лишь вычислительные модули.

С уважением, Ефремов.
16K
26 апреля 2006 года
Ефремов
5 / / 22.04.2006
Здравствуйте.

Затмение нашло.
Функцию достаточно объявить: extern “C” functionName()
И проблема решена.

С переменными сложнее – приходится в модулях *.CPP объявлять отдельно с extern “C”, но это нудно.
Может есть более элегантный прием?
#pragma какая ни будь? Пока я не нашел.

С уважением. Ефремов.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог