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

Ваш аккаунт

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

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

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

Вызов функций до вызова main()

2.9K
21 января 2005 года
pushkin
43 / / 13.09.2004
Как можно вызвать некоторые функции инициализации чего-то-там до вызова функции main()? В Borland C++ 3.x это можно было сделать при помощи директивы #pragma startup <имя функции> или при помощи другой директивы, которая задает приоритет запуска.

Даже не спрашивайте, зачем мне это нужно - я сразу скажу :-)

У меня есть куча исходников под Borland C++ 3.x, которые надо перекомпилять под Visual C++ .NET или 6.x. При этом стоит задача: код не должен значительно меняться, должны меняться только базовые библиотеки низкого уровня. Их я перекомпилял, но осталась вот эта вот проблема.

Заранее благодарю :-)
831
21 января 2005 года
S_T
117 / / 23.10.2002
Если функции что-то возвращают, то есть описаны как
TypeName funcName(Params);
То перед функцией main можно написать такой код:
static TypeName dummy = funcName(Params);
Если же функции ничего не возвращают, т.е
void funcName(Params);
То я думаю, что и тут можно аналогичным образом изловчиться. Но если ничего не поможет, то можно сделать так: перед функцией main описать следующую конструкцию:
struct PreMainLauncher()
{
PreMainLauncher()
{
funcName(Params);
}
}
static PreMainLauncher launcher();

Кстати, все это не обязательно городить именно перед функцией main - можно реализовать в начале каждого *.cpp файла - и вызывать таким образом нужные функции.
2.9K
21 января 2005 года
pushkin
43 / / 13.09.2004
Тут дело в том, что исходники, которые мне нужно адаптировать под винду - их много и я не имею права их сильно менять. :( А так как их писали парни с кривыми пальцами, то мне приходится искать способ вызывать функции до инициализации статических переменных (до вызова конструкторов экземпляров статических классов).

В этих исходниках эти статические переменные используются повсеместно и при своей инициализации могут пытаться показывать сообщения об ощибках на экране или записывать что-то в базу данных Btrieve. А чтоб они это могли делать надо сначала инициализировать консольный режим и библиотеки доступа к БД.

Все это раньше через ж... компилировалось под защищенный режим DOS, а в видне все по-другому. :-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог