Библиотека InpOut32.dll для доступа к Lpt прекрасно подключается к .exe (format PE GUI 4.0), но вот при создании .com программы для DOS (Use16) макрос из Import32.inc - Import не компилируется, найти его 16- битный аналог мне не удалось. Код из Import32.inc: Код (Text): macro import name,[label,string] { common rb (- rva $) and 3 if defined name#.referred name#.lookup: forward if used label if string eqtype '' local _label dd RVA _label else dd 80000000h + string end if end if common if $ > name#.lookup name#.redundant = 0 dd 0 else name#.redundant = 1 end if name#.address: forward if used label if string eqtype '' label dd RVA _label else label dd 80000000h + string end if end if common if ~ name#.redundant dd 0 end if forward if used label & string eqtype '' _label dw 0 db string,0 rb RVA $ and 1 end if common end if } Подскажите, пожалуйста, как можно его переписать под DOS, либо как-то иначе использовать функции Out32 и Inp32 из InpOut32.dll.
Для того, чтобы объяснить почему вы не правы, надо чуть ли не книгу написать. Нельзя. В 16-битной DOS-программе. использовать API из dll. Не потому, что Заратустра не позволяет, а потому, что невозможно. Макрос нельзя переписать - потому что нельзя использовать результаты его действия. Вам надо писать 16-битные функции работы с Lpt, или с чем там еще. И их использовать.
Библиотека InpOut16.dll у меня есть, функции соответственно Inp16 и Out16, проблема осталась, не знаю как их использовать 16-битным приложением. Проще говоря, необходима 16-битная функция импорта функций из DLL.
Narki, а зачем вам библиотека для .com, когда есть инструкции in и out и прочие int 0x17? А InpOut16.dll, насколько я понимаю, для 16-битных Windows-приложений в формате NE (New Executable), и написана для всяких VB по причине отсутствия там инлайн-ассемблера. Что касается 16-битного импорта, то фасм не поддерживает формат NE, поэтому вам вряд ли нужен макрос для импорта в этом формате.
Я просто хочу написать программу с доступом к LPT для командной строки, 16-битную, запускать её буду в ХР. Прямого доступа к LPT в ХР нет, информации по работающему протоколу доступа я не нашёл, дизасемблировать InpOut32.dll (~20kb кода) я не потяну. Если есть инфа по протоколу доступа к LPT в ХР скинте плиз.
Dmitry_Milk Дров парпорта не поддерживает произвольный I/O. Narki NTVDM позволяет порты юзать. Для это ничего кроме инструкций ввода-вывода не нужно. Тот дров нужен для открытия доступа из протектед мода в обход защиты(наверно IOPM настраивает..). Если нужно открыть I/O из юзермода, то кроме битмапы можно заюзать IOPL - поднять до 3, настроив поля в обьектах, шедулер сие поддерживает. Но в любом случае работа с портами из юзермода ой как не тру. Наоборот. В XP есть ProcessUserModeIOPL, который открывает прямой доступ к железу. Вызываем этот инфокласс и можем юзать In, Out, Cli, Sti из р3.
Может кто-нибудь объяснить, что за мода пошла писать 16-битные DOS-овые приложения с целью запускать их под NT-Win-32? Уже который топик на васме. Я чего-то не понимаю в этом мире?