|
Программирование >> Перегруженные имена функций и идентификаторы
Что такое 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-бит, линкер не находит библиотеку 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 для линкера.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |