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

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


100% совместимости c dos4gw никто, конечно, гарантировать не может, но говорят, что под ним удалось запустить даже D00M.

Более того, 100% совместимости просто нет - например, графические программы под DOS/4G в Цинке, которые определяют наличие DOS/4GW путем вызова int 21h, ah = 0xFF.

При этом DOS/4GW и PMODE/W возвращают различный (хотя и похожий) результат.

А также DOS/4G подобные :

♦ WDOSX (последняя версия 0.94, size ~12 Kb)

♦ DOS32A (последняя версия 4.30, size ~20 Kb) В чем отличия между DOS4GW и DOS4GW PRO?

DOS4GW:

♦ используется в виде отдельного .EXE модуля, имеет ограничения по размеру виртуальной памяти (16 Мб), ограничение по общей используемой памяти (32 Мб)

♦ отсутствует поддержка некоторых DPMI вызовов (например 303h - allocate callback)

♦ отсутствует возможность писать TSRы

♦ отсутствует поддержка DLL, freeware

♦ 4GWPRO - встраивается в исполняемую программу

♦ ограничений в размере виртуальной памяти нет

♦ полная поддержка DPMI 1.0

♦ поддержка DLL

♦ поддержка TSR

♦ стоит денег.

DOS4G:

♦ не привязан к конкретному компилятору

♦ возможен запуск нескольких .EXEшников под одним экстендером

♦ поддержка DLL документирована

♦ обильная документация

♦ стоит больших денег.

В процессе экспериментов выяснилось, что поддержка виртуальной памяти (VMM - virtual memory manager) и поддержка полного набора DPMI вызовов присутствуют не во всех вариантах 4GWPRO.

Можно ли поиметь 4GWPRO даром?

Да, можно. Для этого его надо вырезать из головы программы собранной с 4GWPRO. Обычно такая программа при запуске сама об этом сообщает.

Однако не из любой программы можно получить полноценный экстендер.

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

♦ ACMAIN.EXE,

♦ DESCENT.EXE,

♦ HB5.EXE,

♦ HEROES.EXE

дают версию 1.97 с полным набором прелестей. Размер: 217764 байта.

♦ ABUSE.EXE,

♦ BK.EXE,

♦ HEXEN.EXE,

♦ ROTT.EXE,

♦ TV.EXE (Terminal Velocity)

дают версию 1.97 без VMM и поддержки расширенного набора DPMI.

Размер: 157268 байт.

♦ ACRODOS.EXE (Acrobat reader for DOS)

дает версию 1.97 с VMM, но без расширенного набора DPMI.

Размер: 203700 байт.

♦ D4GRUN.EXE (из Watcom 10.0а)

дает версию 1.96 без VMM, но с расширенной поддержкой DPMI (но судя по надписям внутри - это DOS4G, а не 4GWPRO). Размер: 154996 байт.



♦ DOOM2.EXE

дает версию 1.95 без поддержек VMM и расширенного набора DPMI. Размер: 152084 байт.

Как переделать программу, скомпилированную под DOS4GW для использования с полученным 4GWPRO?

COPY /В 4GWPRO + OLD.EXE NEW.EXE

Почему полученный 4GWPRO не дает использовать VMM, или не дает больше 16 Мб?

Простое шаманство поможет:

00000247

00000247:

1-VMM по умолчанию вкл.,

0-выкл.

00000247:

00000247:

1-подавлять заставку при

старте

00000247:

Для 1.97 размером 217764 байта.

0001BFF8: (4 байта) размер виртуальной памяти по умолчанию.

Можно ли использовать DLL c DOS4GW?

Можно, это обеспечивает утилита DLLPOWER.

Ищите в SimTelовских архивах файлы dllpr251.zip, dllpr254.zip и

может быть уже есть более поздние.

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

Перенос ваших программ возможен, но скорее всего вам придется править ваш код. Начать можно с изменения int -> short.

Ватком ругается на стандартные библиотечные функции, в то время как BC жует их нормально, что делать?

Большинство программ, которые нормально работали под BC, будут нормально компилироваться и Ваткомом, нужно лишь немного изменить код, использующий специфичные функции, реализованные в BC, как расширение стандартной библиотеки.

Для большинства таких функций есть аналогичная или подобная функция.

Например, вместо gettime() следует использовать dos gettime(), вместо findfirst - dos find first, и так далее.

Обратитесь к хелпу по BC, вы наверняка найдете имена аналогичных функций, запросив помощь по тем именам, которые не устроили компилятор Ваткома.

Кроме того, следует помнить, что например random(num) не является стандартной функцией, а это просто макрос из stdlib.h, и вместо него можно использовать конструкцию типа (rand() % num).

Можно ли перенести под Ватком программы, написанные с применением OWL или TVision?

OWL - скорее всего нет, поскольку он построен на расширениях синтаксиса, которые не обрабатывается компилятором Ватком. Для переноса TVision есть несколько вариантов.

Существуют diffы для преобразования TV под GNU C++ (продукт называется GVISION. Это не решает разом все проблемы, естественно, но по крайней мере этот вариант TV заточен под 32 бита и флат модель.

Совсем недавно стали доступны два порта TV под Watcom C++.

Первый - это перенос под полуось и dos4gw TV 1.0.

Второй имеет внутри маленькую доку и собственно сы-рец+ makefile. Доку рекомендуем внимательно прочесть - может пригодится при перекомпиляции ваших программ.

В моей программе используются inline ассемблер и псевдорегистры, смогу ли я заставить их работать под Ваткомом?

Нет. Придется переписать на встроенном ассемблере, либо вынести в отдельный .asm модуль.

С 11 версии поддерживает стиль a la Borland:

asm ...

А нельзя ли кaк-нибyдь на вaткoмe реализовать AX из Borland? А то переношу под него библиотеку, a там они активно юзаются

Если вам AX нужен на read-only, то можно сделать прозрачно:

=== Cut ===

short reg ax ( void ) ; #define AX reg ax()

#pragma aux reg ax = \

value [ax]

#if defined( 386 ) defined( FLAT ) int reg eax ( void ) ;

#define EAX reg eax() #pragma aux reg eax = \



value [eax]

#define rAX reg eax() чтобы не задумываться о контексте #else

#define rAX reg ax()

#endif

=== Cut ===

А если для модификации, то лучше не полениться и сделать как просит Ватком (то бишь оформите этот фрагмент как inline-asm).

Встречается проблема, когда надо собирать смешанный проект - часть модулей компилится Ваткомом, а часть Боpландом (например ассемблером). Линкер падает по трапу, вываливается с бредовыми ошибками и вообще ведет себя плохо. Что делать?

Ha худой конец есть способ:

♦ борландовый

ob]->wdisasm->.asm->wasm->

♦ ваткомовский

А дальше это отдавать как обычно wlinky.

Есть еще народное средство - нужно взять tasm 3.2, а еще лучше tasm 4.0, последний хорош тем, что имеет режимы совместимости по синтаксису со всеми своими предками...

Или TASM32 5.0 с патчем (обязательно 32 bits)

При задании надписей заголовков окон, меню, кнопок и т.п. на русском языке все прекрасно видно пока я нахожусь в режиме дизайнера. Стоит только запустить созданную аппликуху - кириллица исчезает напрочь

Замените WRC.DLL из поставки Optima 1.0 на WRC.EXE из поставки Watcom 11.0 и все придет в норму.

Какой компилятор C (C++) лучше всех? Что лучше: Watcom C++ или Borland C++? Посоветуйте самый крутой компилятор?!

Смотря для чего. Если нужна многоплатформенность и хорошая кодогенерация, то лучше - Ватком. Но следует учитывать, что производство Ваткома прекращено и компилятор уже не соответствует в полной мере стандарту C++, и уже никогда не будет соответствовать. А вот для разработки приложений под Win32 лучше будет Borland C++ Builder, хотя качество кодогенерации у него ниже и ни о какой многоплатформен-ности говорить не приходится. Что же касается BC++ 3.1 - это не более, чем учебный компилятор, и он уже давно забыт.

Не следует забывать и о gcc, который есть подо все мыслимые платформы и почти полностью поддерживает стандарт, однако он (точнее, его Win32 версия - cygwin) не слишком удобна для создания оконных Win32 приложений, с консольными - все в порядке, причем консольные приложения можно создавать и досовой версией - djgpp, дополненной пакетом rsxnt.

А вообще - рассуждать, какой компилятор лучше, достаточно бесполезное занятие. Идеального компилятора не существует в природе. Совершенно негодные компиляторы не имеют широкого распространения, а тот десяток компиляторов (не считая специфических кросс-компиляторов под разные встроенные системы), которые имеют широкое распространение, имеют свои достоинства и недостатки, так что приходится подбирать компилятор, наиболее подходящий для решения конкретной задачи.

Есть ли в Watcom встроенный ассемблер?

Встроенного asma у него на самом деле нет. Есть правда возможность писать asm-функции через #pragma aux .... Например:

#pragma aux DWordsMover = \

mov esi, eax , \

mov edi, ebx , \

jcxz @@skipDwordsMover , \

rep movsd , \

@@skipDWordsMover: , \

parm [ebx] [eax] [ecx] modify [esi edi ecx] void DWordsMover(void* dst, void* src, size t sz); В версии 11.0 точно имеется asm{}.

BC не хочет понимать метки в ассемблерной вставке - компилятор сказал, что не определена эта самая метка. Пришлось определить метку за пределами ASM-блока. Может быть есть более корректное решение?

Загляни в исходники RTL от BC++ 3.1 и увидишь там нечто красивое, например:

#define I asm

........

I or si,si I ]z m1

I mov dx,1 m1:

I int 21h

и т.д.



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

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