Да вы и сами могли в этом убедиться, пытаясь все таки запустить Port.exe в XP, который у вас наверняка и стоит. При этом вы получали следующее услужливое сообщение от Windows:
Происходит это из-за того что, разработчики NT с целью обеспечения безопасности использования совместных аппаратных ресурсов компьютера, запретили к ним прямой доступ из программ пользовательского режима (по сути дела из любых программ). Чтобы все-таки обратиться к порту, необходимо все операции проводить через драйвер (довольно хитрая программа, которую начинающему так сходу и не напишешь). Но к счастью, есть уже несколько готовых инструментов позволяющих без проблем общаться LPT портом в NT.
Начнем с начала с самого простого, и в тоже время очень мощного средства: библиотеки inpout32.dll. |
Этот комплекс состоит из 3 файлов:
- собственно самой динамической библиотеки inpout32.dll
- статической библиотеки LIB, необходимой на этапе сборки программы
- заголовочного файла с прототипами используемых функций
Скачать эти файлы можно (и нужно) по ссылке ниже:
|
Библиотека эта импортного производства, подробнее о том кто ее писал и как она работает можно почитать вот по этому адресу: 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 а также займемся модернизацией нашего аппаратного оборудования, а то один светодиод - это не серьезно.