Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 162 163 164 [ 165 ] 166 167 168 ... 210


wcl386 /l=dos4gw hello.c - для DOS4GW

Я написал простейшую программку, а она внезапно повисает, или генерирует сообщение о переполнении стека, что делать? В то же время когда я компилирую эту программку другим компилятором - все работает нормально?

Желательно сразу после установки поправить файлики

WLSYSTEM.LNK, поставив требуемый размер стека, по

умолчанию там стоит 1 ии 2 Кб, чего явно недостаточно для

программ, создающих пусть даже небольшие объекты на стеке.

Для большинства применений достаточно размера стека в 16 или 32 килобайта. Если вы работаете под экстендером, можно поставить туда хоть мегабайт.

Я столкнулся с тем, что Ватком ставит знак подчеркивания не в начало имени, а в конец, к чему бы это?

Положение знака подчеркивания говорит о способе

передачи параметров в данную функцию, если его нет совсем,

параметры передаются через регистры, если сзади - через стек.

Я написал подпрограмму на ассемблере, со знаком подчеркивания спереди, а Ватком ищет то же имя, но со знаком сзади, как это поправить?

Можно написать:

#pragma aux ASMFUNC * ; и описывать все свои функции как:

#pragma aux (ASMFUNC) foo;

#pragma aux (ASMFUNC) bar;

Причем, есть специальное значение - символ , который сигнализирует, что имя надо преобразовать в верхний регистр, например: #pragma aux myfunc ; приведет к появлению в объектном файе сс1лки на MYFUNC .

Есть библиотека, исходники которой отсутствуют, как заставить Ватком правильно понимать имена функций и ставить знак спереди а не сзади?

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

Как сделать так, чтобы в некоторых случаях Watcom передавал параметры не через регистры, а через стек?

Использовать cdecl.



Например:

extern void cdecl dummy( int );

Как делать ассемблерные вставки в программу?

Примерно так:

unsigned short swap bytes ( unsigned short word ); #pragma aux swap bytes = xchg ah,

al \

parm [ ax ] \ value [ ax ];

Слово parm определяет в каком регистре вы передаете значение, слово value - в каком возвращаете.

Можно использовать метки. Есть слово modify - можно указать что ваша вставка (или функция) не использует память, а трогает только те или иные регистры.

От этого оптимизатору лучше жить. Прототип не обязателен, но если есть, то компилер проверяет типы.

Надо слепить задачу под графику, но нужны окошки и мышь. Тащить ли ZINC 3.5, или в графике описать что-нибудь свое. Может, под Ватком что-то есть более мощное и готовое?

Ничего лучше Зинки пока нет. Тащите лучше Зинку 4.0, она

вроде под Ватком лучше заточена.

При написании некоторых функций по видео-режимах вдруг захотелось мне сотворить динамические библиотеки. Есть мысля генерить exe-файл а затем грузить его. Что делать?

Использовать DOS4GW/PRO. Он вроде поддерживает DLL.

Или пользоваться PharLap TNT, он тоже поддерживает.

Грузить экзешник тоже можно, но муторно. Через DPMI аллоцируете сегмент (сегменты) делаете из них код и данные, читаете экзешник и засовываете код и данные из него в эти сегменты. Лучше использовать TNT.

Графическая библиотека Ваткома отказывается переключать режимы/банки или делает это криво. Что делать?

В результате ковыряния в библиотеке выяснилось, что

криворукие ваткомовцы совершенно не задумываются ни о какой

переносимости и универсальности их библиотек.

В результате, если видео-карта имеет в биосе прошитое имя производителя или другую информацию о нем, то для нее будет вызываться вместо функции переключения банков через VESA,



другая функция, работающая с картой напрямую (иногда даже через порты).

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

В результате, все это свинство начинает глючить и иногда даже виснуть.

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

Как затыкать - а просто, есть переменная: SVGAType, которая описывается следующим образом:

extern C int SVGAType; , и потом перед (важно!) вызовом setvideomode нужно сказать:

SVGAType = 1; Как руками слинковать exe-файл?

Командой WLINK, указав параметры.

name ...

system ...

debug all

option ...

option ...

option ...

file ... file ...

libpath ... library ... Например:

wlink name myprog system dos4gw debug all file myprog

Что такое ms2vlink и зачем она нужна?

Это для тех кто переходит с мелкософтовского Си. Преобразователь команд LINK в WLINK.



1 ... 162 163 164 [ 165 ] 166 167 168 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика