Qraizer
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору akaGM Цитата: и кстати, разве в rtl c0x.asm прилагались? так ему ещё и tasm'ом компилить их придётся... | Вообще-то прилагались. Только они тут ни при чём. Не в них дело, а в некоторой #pragma startup функции, которая используется библиотеками для выполнения инициализации перед main(). Упомянутые тобой асмовые стратеры вызвают все такие #pragma startup функции в Initialize, которая proc near, используя косвенные вызовы. Вот пример. У тебя есть Код: class A { /* ... */ public: A(int x){/* ... */} /* ... */ }; A a(123); | Что сделает компилятор для инициализации глобальной a? Как раз и создаст некую #pragma startup функцию, которая просто вызовет конструктор A. Если теперь этот сырец засунуть в библиотеку, то эта #pragma startup функция тоже попадёт в эту библиотеку и будет подлинковываться к любому приложению, если он эту библиотеку заюзает. То же происходит с консольной библиотекой, чей интерфейс описывает <conio.h>. Если ты заюзаешь у себя в программе clrscr(), к примеру, то это зафорсит подлинковку соответствующей #pragma startup функции, которая ко всему прочему попытается подготовить данные для delay(). И ей пофиг, что delay() в программе не вызывается. Её подлинковали, она и работает. Вот её и надо пропатчить, чтоб на быстрых процессорах не глючила.
---------- Одни с годами умнеют, другие становятся старше. |
|