Подключение DLL к COM в FASM'е (Use16)

Тема в разделе "WASM.BEGINNERS", создана пользователем Narki, 21 фев 2012.

  1. Narki

    Narki New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2011
    Сообщения:
    5
    Библиотека InpOut32.dll для доступа к Lpt прекрасно
    подключается к .exe (format PE GUI 4.0), но вот при
    создании .com программы для DOS (Use16) макрос из
    Import32.inc - Import не компилируется, найти его 16-
    битный аналог мне не удалось.

    Код из Import32.inc:
    Код (Text):
    1. macro import name,[label,string]
    2.  { common
    3.     rb (- rva $) and 3
    4.     if defined name#.referred
    5.      name#.lookup:
    6.    forward
    7.      if used label
    8.       if string eqtype ''
    9.        local _label
    10.        dd RVA _label
    11.       else
    12.        dd 80000000h + string
    13.       end if
    14.      end if
    15.    common
    16.      if $ > name#.lookup
    17.       name#.redundant = 0
    18.       dd 0
    19.      else
    20.       name#.redundant = 1
    21.      end if
    22.      name#.address:
    23.    forward
    24.      if used label
    25.       if string eqtype ''
    26.        label dd RVA _label
    27.       else
    28.        label dd 80000000h + string
    29.       end if
    30.      end if
    31.    common
    32.      if ~ name#.redundant
    33.       dd 0
    34.      end if
    35.    forward
    36.      if used label & string eqtype ''
    37.      _label dw 0
    38.         db string,0
    39.         rb RVA $ and 1
    40.      end if
    41.    common
    42.     end if }
    Подскажите, пожалуйста, как можно его переписать
    под DOS, либо как-то иначе использовать функции
    Out32 и Inp32 из InpOut32.dll.
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Для того, чтобы объяснить почему вы не правы, надо чуть ли не книгу написать.

    Нельзя. В 16-битной DOS-программе. использовать API из dll. Не потому, что Заратустра не позволяет, а потому, что невозможно.

    Макрос нельзя переписать - потому что нельзя использовать результаты его действия.

    Вам надо писать 16-битные функции работы с Lpt, или с чем там еще. И их использовать.
     
  3. Narki

    Narki New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2011
    Сообщения:
    5
    Библиотека InpOut16.dll у меня есть, функции соответственно
    Inp16 и Out16, проблема осталась, не знаю как их использовать
    16-битным приложением.
    Проще говоря, необходима 16-битная функция импорта функций из DLL.
     
  4. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Narki, а зачем вам библиотека для .com, когда есть инструкции in и out и прочие int 0x17? А InpOut16.dll, насколько я понимаю, для 16-битных Windows-приложений в формате NE (New Executable), и написана для всяких VB по причине отсутствия там инлайн-ассемблера.
    Что касается 16-битного импорта, то фасм не поддерживает формат NE, поэтому вам вряд ли нужен макрос для импорта в этом формате.
     
  5. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    А просто открыть файл по имени LPT обычными DOS-овскими файловыми функциями не годится?
     
  6. Narki

    Narki New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2011
    Сообщения:
    5
    Я просто хочу написать программу с доступом к LPT
    для командной строки, 16-битную, запускать её
    буду в ХР. Прямого доступа к LPT в ХР нет, информации
    по работающему протоколу доступа я не нашёл,
    дизасемблировать InpOut32.dll (~20kb кода) я не потяну.
    Если есть инфа по протоколу доступа к LPT в ХР скинте
    плиз.
     
  7. LightMoon

    LightMoon New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2012
    Сообщения:
    73
    Dmitry_Milk
    Дров парпорта не поддерживает произвольный I/O.

    Narki
    NTVDM позволяет порты юзать. Для это ничего кроме инструкций ввода-вывода не нужно. Тот дров нужен для открытия доступа из протектед мода в обход защиты(наверно IOPM настраивает..). Если нужно открыть I/O из юзермода, то кроме битмапы можно заюзать IOPL - поднять до 3, настроив поля в обьектах, шедулер сие поддерживает. Но в любом случае работа с портами из юзермода ой как не тру.

    Наоборот. В XP есть ProcessUserModeIOPL, который открывает прямой доступ к железу. Вызываем этот инфокласс и можем юзать In, Out, Cli, Sti из р3.
     
  8. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    Может кто-нибудь объяснить, что за мода пошла писать 16-битные DOS-овые приложения с целью запускать их под NT-Win-32? Уже который топик на васме. Я чего-то не понимаю в этом мире?