Программирование >>  Арифметические и логические операции 

1 ... 36 37 38 [ 39 ] 40 41 42 ... 53


option option

file file

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

wlink name myprog system dos4gw debug all file myprog

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

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

Что такое wd ?

Это отладчик, бывший WVIDEO, но с более удобным интерфей-

сом.

Поставляется начиная с версии 10.

Нужно состряпать маленький NLMчик. Что делать?

Вам нужен WATCOM 10.0. В него входит NLM SDK и вроде хелп к нему. Если WC <= 9.5, то нужен сам NLM SDK и документация.

Линковать :

(файл wclink.lnk например) system netware Debug all

opt scr Hello, world

OPT VERSION=1.0

OPT COPYR Copyright (C) by me, 1994

#include <conio.h>

void main( void )

cprintf( Hello, world!\n\r );

ConsolePrintf( Hello, World - just started!\n\r );

RingTheBell();

Собираю программу под OS/2 16-бит, линкеp не находит библиотеку DOSCALLS.LIB. Кто виноват и что делать?

Никто не виноват. В поставке Ваткома есть библиотека os2286.lib.

Это она и есть. Ее надо либо переименовать в doscalls.lib, либо явно прилинковывать.

Что такое удаленная отладка через pipe? Как ею пользоваться под

OS/2?

В одной сессии запускается vdmserv.exe, потом запускается отладчик wd /tr=vdm и соединяется с vdmserv по пайпу, ну и рулит им. Как удаленная отладка через компорт работает знаете? Вот тут так же, только через пайп.

Собираю 32-битный экзешник под PM с отладочной информацией (/d2), но после того как осевым rc пришпиливаю к нему ресурсы, отладочной информации - как не бывало. Это лечится как-нибудь?

Откусываете дебугинфу wstripом в .sym файл и потом присобачиваете ресурсы. Если имя экзешника и имя .sym совпадают, дебаггер сам его подхватит.

Отладочную информацию надо сбрасывать в SYM-файл:

wcl386 /d2 / op symf /l=os2v2 pm

WATCOM на 4 мб компилиpует быстpей чем на 8 мб, а на 8 мб быстpее чем на 16 мб, почему?

Чем больше памяти, тем лучше работает оптимизатор. Можно дать ему фиксированный размер памяти - SET WCGMEMORY=4096, и

тогда он не будет пользоваться лишней памятью.

Учтите, что для компиляции программ для Windows на C++ данного значения может не хватить.

Есть такая штука - pipe в gcc и bcc. А вот в Watcome как перехватить выхлоп программы?

В смысле забрать себе stdout и stderr? Да как обычно - сдупить их куда-нибудь. Функцию dup() еще никто не отменял.

А есть ли способ перехватить ошибку по нехватке памяти? То есть какой-нибудь callback, вызываемый диспетчером памяти при невозможности удовлетворить запрос?

В C+ + есть стандартный: set new handler().

Чем отличаются статические DLL от динамических?

Разница в том, что вы можете функи из DLL на этапе линковки в EXEшник собрать (static). А можете по ходу работы проги DLL грузить и функи выполнять (dynamic).



Решил тут DLL под OS/2 создать - ничего не вышло. Что делать?

Вы динамически собираетесь линковать или статически? Если статически, тогда вам просто declare func сделать и включить dll в test.lnk.

Если динамически, то вы должны прогрузить dll, получить адрес функи и только после этого юзать. Можно делать это через API OS/2: DosLoadModule DosQueryProcAddr DosFreeModule.

Например:

exe.c:

#define INCL DOSMODULEMGR #include <os2.h> #define DLLNAME DLL PFN Dllfunc;

char FuncName[]= RegardFromDll ; char LoadError[100]; void main() HMODULE MHandle;

DosLoadModule( LoadError, sizeof( LoadError ), DLLNAME, &MHandle ); DosQueryProcAddr( MHandle, 0, FuncName, &Dllfunc ); (*Dllfunc)();

DosFreeModule( MHandle );

dll.c

#include <stdio.h>

void RegardFromDll( void )

printf( This printed by function, loaded vs DLL\n );

Когда компиляете свою DLL, то добавьте свич -bd, который создаст в .obj такое дело, как DLLstart. После этого все заработает:

wpp386 -bd -4s -ox dll.cpp

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

Если используете плюсовый компилер - просто опускайте имена параметров, например:

void foo( int bar, char* )

#pragma off(unreferenced) Можно использовать макрос:

#ifndef NU

#ifdef cplusplus #ifdef BORLANDC #define NU( ARG ) ARG #else

#define NU( ARG ) (void)ARG

#endif

#else

#define NU( ARG ) ARG=ARG

#endif

#endif

Для многих, особенно юниксового происхождения, компайлеров работает /*ARGSUSED*/ перед определением функции.

Подскажите, как в watcome увеличить число открытых файлов?

Смотрите TFM. grow handles(int newcount).

Как заставить 16-ти битные OS/2 задачи видеть длинные имена файлов?

Опция newfiles для линкера.

Что-то у меня Dev.Toolkit for OS/2 Warp к Ваткому WC10.0 прикрутить не получается. Говорит definition of macro Far16 not identical previos definition. Что делать?

Воткните где-нибудь определение IBMCPP или -D IBMCPP в командной строке или #define перед #include <os2.h>.

Для Ваткома 10.5a надо не просто d IBMCPP, а -d IBMCPP =1.

Пишу: printf ( * );, а он сразу ничего не печатает. Что делать?

В стандарте ansi, чёткого определения как должны буферизовы-ваться потоки stdin/stdout/stderr нет, нормальным является поведение со строчной буферизацией stdout/stdin.

Всякие другие дос-компилеры обычно не буферизуют stdout совсем, что тоже нормально. Признаком конца строки в потоке является \n, именно при получении этого символа происходит flush для line buffered потока.

Выходов два: отменить буферизацию или писать \n в нужных местах. Можно fflush(stdout) звать, тоже вариант.

Буферизация отменяется setbuf(stdout,NULL) или setvbuf(stdout, NULL, IONBF,0).

Можно ли сделать встроенный в ехе-шник DOS4GW, как в D00M?

Легально - нет. Предыдущие версии позволяли просто скопировать:

copy /b dos4gw.exe + a.exe bound.exe



Но сейчас (начиная с версии 10.0а) это не работает и для этой цели нужно приобрести dos4gw/pro у фирмы Tenberry Software.

Нелегально - да. Существует утилита dos4g/link для автоматизированного выдирания и вклеивания экстендеров из/в EXE-файлов. Помещалась в WATCOM.C в uuencode и доступна от автора.

Нужно взять не тот DOS4GW, что в комплекте (DOS4GW 1.97), а Pro-версию (DOS4GW Professional). Выдрать можно из DOOM, HERETIC, HEXEN, WARCRAFT2 и т.д., где он прибинден. Причем можно найти 2 разновидности Pro 1.97 - одна поддерживает виртуальную память, другая нет и еще что-то по мелочи.

Различаются размерами (который с виртуалкой - толще). При-биндить можно разными тулзами, например PMWBIND из комплекта

PMODE/W.

Также можно отрезать у dos4gw.exe последние несколько байт с хвоста, содержащие строку WATCOM patch level [...]. Далее обычным бинарным копированием:

copy /b dos4gw.exe myexe.exe mynewexe.exe

Работоспособно вплоть до версии DOS/4GW 1.95. В версии 1.97 введена проверка на внедренность linexe в хвост экстендера.

Еще существует родной биндер для DOS/4GW. Он в какой-то мере может помочь pmwbind.exe от PMODE/W (однако версия 1.16 не понимала каскадный формат DOS/4GW, работоспособна для одномодульно-го 4GW/PRO); решает проблему тулза dos4g/link, которая доступна у автора или у модератора.

Рекомендуется попробовать 4GWPRO (выдрать из игрушек с помощью pmwbind.exe или dos4g/link), усеченный вариант DOS/4GW (в модулях 4grun.exe, wd.exe - для ДОС), а также PMODE/W.

В поставке DOS4G есть 4GBIND.EXE (но для этого надо купить или украсть DOS4G).

Как определить количество свободной памяти под dos4gw? Попытки использовать memavl и memmax не дают полную картину. Что делать?

Количество свободной памяти под экстендером - не имеет смысла, особенно если используется своппинг. Для определения наличия свободного RAM нужно использовать функции DMPI, пример использования есть в хелпе.

Как добраться до конкретного физического адреса под экстендером?

Вспомните про линейную адресацию в dos4gw. Он в этом плане очень правильно устроен - например, начало сегмента 0xC000 находится по линейному адресу 0x000C0000.

Вот примерчик, который печатает сигнатуру VGA биоса.

#include <stdio.h> #include <string.h> #include <ctype.h> void main( void )

unsigned i;

for( i = 0; i < 256;

char c;

c = *(char*)( 0x000C0000 + i ); putchar( isprint( c ) ? c: . );

Как отлаживать программы, работающие в Pharlap режиме?

wd /tr=pls file.exe,

для фарлапа или

wd /tr=rsi file.exe для dos4gw.

Какая разница между dos4gw и Pharlap? Или это одно и то же?

Это разные экстендеры. Самая существенная для вас разница - dos4gw входит в поставку Ваткома, а фарлап - нет.

Что такое RUN386.EXE? Вроде с его помощью можно пускать фаpлаповые ехе-шники?

Это рантайм фарлапа. Ho он денег стоит.

DOS4GW такой огромный (больше 200 к), что можно использовать вместо него, чтобы поменьше диска занимало?

Существует шароварный экстендер PMODE, у которого есть версия, рассчитанная на Watcom - PMODE/W, ее можно использовать вместо DOS4GW, она занимает всего 9 к, встраивается внутрь ехе-файла.

Он не обрабатывает некоторые исключительные ситуации, поэтому отлаживать программу все-таки лучше с dos4gw, а встраивать pmode/w лишь в окончательный вариант.



1 ... 36 37 38 [ 39 ] 40 41 42 ... 53

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