Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 2. Работа с LPT под Win 2000, XP: библиотека inpout32.dll

Дмитрий Иванов, 2005-2006
Статья доработана и обновлена 21 Января 2012

Как я уже упоминал в первой статье, наша чудо-программа Port.exe не сможет работать под Windows NT. ОС данного семейства помимо кучи преимуществ перед предыдущими стали обладать омерзительным нравом с точки зрения системного программирования.

Да вы и сами могли в этом убедиться, пытаясь все таки запустить Port.exe в XP, который у вас наверняка и стоит. При этом вы получали следующее услужливое сообщение от Windows:

Происходит это из-за того что, разработчики NT с целью обеспечения безопасности использования совместных аппаратных ресурсов компьютера, запретили к ним прямой доступ из программ пользовательского режима (по сути дела из любых программ). Чтобы все-таки обратиться к порту, необходимо все операции проводить через драйвер (довольно хитрая программа, которую начинающему так сходу и не напишешь). Но к счастью, есть уже несколько готовых инструментов позволяющих без проблем общаться LPT портом в NT.


Начнем с начала с самого простого, и в тоже время очень мощного средства: библиотеки inpout32.dll.


Этот комплекс состоит из 3 файлов:

  • собственно самой динамической библиотеки inpout32.dll
  • статической библиотеки LIB, необходимой на этапе сборки программы
  • заголовочного файла с прототипами используемых функций

Скачать эти файлы можно (и нужно) по ссылке ниже:

Файлы к статье скачать
Имя: inpout.zip (ZIP архив)
Размер: 13 КБ

Библиотека эта импортного производства, подробнее о том кто ее писал и как она работает можно почитать вот по этому адресу: http://www.logix4u.net/inpout32.htm


Рассмотрим практический пример использования библиотеки inpout32.dll. Интегрирурем ее в консольное приложение (С++, Microsoft Visual Studio 6.0) для возможности управления LPT портом из под ОС семейства NT.


Как уже упомянуто выше, программу пишем на Си++. Подробный процесс создания проекта уже был рассмотрен в предыдущей статье, поэтому сейчас буду рассказывать короче. File -> New. Выбираем там Win32 Console Application. Указываем в поле Project name имя проекта, например Port32. Нажимаем Ok. В следюущем окне выбираем пункт An empery project и жмем Finish. Теперь опять File -> New. Отображается закладка Files. Выбираем там C++ Source File. В поле File name укажите имя Port32 для этого файла. Нажимайте Ok. Все, подготовительную работу выполнили, можно собственно писать программу. В левой части окна программы выбираем закладку FileView. В папке Source Files выбираем наш файл Port32.cpp

От автора

Рекомендуется не делать так, как показано на рисунке выше, а именно размещать файлы проекта в директории, путь к которой содержит кириллические символы. Visual Studio "переваривает" такую ситуацию нормально, но иногда попадаются программные продукты для которых кирилица в пути к файлу - непреодолимое препятствие.


А вот собственно и исходный код нашей программы. Копируем его и вставляем в содержмое файла Port32.cpp.

#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
#include "h.h"

void main()
{
  int Address = 888;
  cout<<"Test LPT port in Windows NT."<<endl;
  cout<<"Press '1' to activate and '0' to disactivate lightdiod."<<endl;
  cout<<"To exit press 'e'."<<endl;
  cout<<" "<<endl;

  while( 1 )
  {		
    switch( getch() )
    {
	case '0': cout<<"Disactivate...."<<endl;
		  Out32(Address, 0);
		  break;					  
				
	case '1': cout<<"Activate...."<<endl;
		  Out32(Address, 1);
		  break;

	case 'e': exit(1);
    }
  }
  getch();
}

От автора

С удивлением смотрю сейчас по прешествии уже почти 5 лет на использование операторов cout и endl. Сейчас уже рука такое напись просто не поднимется.


Теперь необходимо подключить к нашему проекту файлы из комплекса inpout32. Сначала необходимо скачать архив с файлами библиотеки (см. ссылку выше). Потом копируем файлы h.h, inpout32.lib в папку нашего проекта. Далее выбираем Project -> Add to Project -> Files... В открывшемся окне отыскиваем папку проекта, выбираем там только что помещенный туда файл h.h и нажимаем Ок. Файл добавится в проект. Проделываем такую же операцию и для файла inpout32.lib.

После проведения этих операций, древо проекта должно иметь примерно такой вид, как на рисунке ниже.

Далее выбираем в меню программы Build ->Compile Port32.cpp, потом Build ->Build Port32.exe Если вы все правильно скопировали, то в самом низу должн появится отладочный вывод, сообщающий нам об успешном завершении процесса компиляции программы:


--------------------Configuration: Port32 - Win32 Debug--------------------
Linking...

Port32.exe - 0 error(s), 0 warning(s)

Теперь важный момент - программу пока не запускайте. "Забираемся" в папку нашего рабочего проекта. Там должна появиться папка Debug. В эту папку необходимо поместить файл inpout32.dll. Этот файл (DLL) должен быть всегда рядом (в одной директории) с нашей программой, иначе Port32.exe не сможет работать.


От автора

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


Вот теперь запускаем нашу программу Port32.exe и проводим ее тестирование с тем же оборудованием (светодиод в порту), которое использовалось в предыдущей статье. Если ошибок не было и все файлы находятся там где надо, мы с радостью наблюдаем, как светодиод синхронно моргает с нажатием клавиш 1 и 0. Как видно из кода, серьезных изменений программа не претерпела, просто все вызовы по выводу в порт проходят через функцию Out32().

В следующих статьях будет рассмотрен еще боллее мощный инструмент для "борьбы" с Windows NT - драйвер GiveIO.sys а также займемся модернизацией нашего аппаратного оборудования, а то один светодиод - это не серьезно.



© Дмитрий Иванов
2005-2006
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2023