Вход

Регистрация
Главная
 

 

Пиротехнические пульты, пиротехническое оборудование
и пиротехника
Pyro Alex RF 48
Open Pyro SFX 8 D
Open Pyro SFX 10/120
Pyro Man 200 M
Spets 150
Приём заказов на изготовление пиротехнических пультов
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Работа с LPT под Win 2000, XP: библиотека inpout32.dll
alexval2007Дата: Суббота, 12.12.2009, 17:05 | Сообщение # 1
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
Работа с LPT под Win 2000, XP: библиотека inpout32.dll

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

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

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

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

Библиотека inpout32.dll

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

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

Скачать эти файлы можно (и нужно) здесь (12 KByte)

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

Все-таки скажу пару слов о том как она (библиотека) работает: сначала она проверяет что за ОС у Вас стоит. Если это 9x - то проблем нет: при обращении к библиотеке с помощью функций Out32(адрес порта, байт данных) - для записи в порт и Inp32(адрес порта) - для чтения из порта, она конвертирует эти обращения к стандартным и известным нам функциям _outp(адрес порта, байт данных) и _inp(адрес порта). Если же она имеет дело с NT, то обращения к ней она конвертирует в запросы к стандартному драйверу ОС, через который и идет обмен информацией с портом.

Ну ладно, хватит теоретической туфты, приступим к практике!

1. Создание проекта программы в VC++ 6.

Программу пишем на Си. Компилятор: VisualC++ 6.0 Подробный процесс создания проекта рассмотрен в предыдущей статье, поэтому сейчас расскажу короче.
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

2. Код программы

Теперь копируем код расположенный ниже в содержимое файла 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."< cout<<"Press '1' to activate and '0' to disactivate lightdiod."< cout<<"To exit press 'e'."< cout<<" "< while(1)
{
switch(getch())
{
case '0': cout<<"Disactivate...."< Out32(Address, 0);
break;

case '1': cout<<"Activate...."< Out32(Address, 1);
break;
case 'e': exit(1);
}
}

getch();
}

3. Подключение файлов к проекту.

Теперь необходимо подключить к нашему проекту файлы из комплекса 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. Вообще этот файл должен быть всегда рядом (в одной директории) с нашей программой, иначе Port32.exe не сможет работать.

4. Тестируем

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

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

PCPORTS.RU Иванов Д.В.

 
  • Страница 1 из 1
  • 1
Поиск:


Rambler's Top100 Пиротехника, салюты, фейерверки. Яндекс цитирования
www.alexval2007.ucoz.ru © 2008