#c #windows #parallel-processing #privileges #ports
#c #Windows #параллельная обработка #привилегии #порты
Вопрос:
У меня возникли некоторые проблемы с C. Я пытаюсь запрограммировать параллельный порт в Windows 7 Professional x64 в VS 2010 Ultimate. Поскольку у меня нет параллельного порта, я использую конвертер из USB-> Parallel, и Windows правильно установила драйверы. Я припаял 8 светодиодов на конце параллельного разъема, и все они работают нормально, когда я подключаю USB к компьютеру. Теперь я хотел бы управлять параллельным портом с помощью моей программы, написанной на C, которая:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <Windows.h>
/********************************************/
/*This program set the parallel port outputs*/
/********************************************/
void main (void)
{
//clrscr(); /* clear screen */
_outp(0x378,0xff); /* output the data to parallel port */
getch(); /* wait for keypress before exiting */
}
Программа компилируется и запускается, но я получаю сообщение об ошибке:
Unhandled exception at 0x00f313a5 in portovi.exe: 0xC0000096: Privileged instruction.
Я читал, что порт ввода-вывода отключен на компьютерах с Windows NT и что для этого нужен специальный драйвер. Есть ли какое-либо решение для этого?
Комментарии:
1. conio.h — ужасный, ужасный способ написания вещей.
Ответ №1:
Есть способы обойти это. Смотрите, например, здесь.
Комментарии:
1. Я не знаю, сделал ли я все, что было сказано. Я положил inpoutx64.dll в папку system32/drivers. Я должен перекомпилировать проект и включить загруженную библиотеку?
2. Не поможет. Смотрите social.msdn.microsoft.com/Forums/en/csharplanguage/thread /…
3. Я наткнулся на эту статью по ссылке, которую вы мне дали: support.microsoft.com/kb/322091/en-us кажется, это единственный путь
Ответ №2:
Ваш USB-> параллельный конвертер имеет драйверы для создания виртуального параллельного порта. Она реализует API параллельного порта Windows. В ней не реализован API уровня регистра параллельного порта PC / AT, и даже если бы вам было разрешено указать порт ввода-вывода 0x0378
, вы бы там ничего не нашли. Только реальный PC / AT параллельные порты на системной шине (ISA или PCI) используют этот регистр.
Комментарии:
1. Я тоже рассматривал это на самом деле. Могу ли я записать значение 0x0378 в идентификатор моего устройства USB-концентратора, к которому я его подключил?
2. @Juraj: Нет. USB-концентратор уже используется всеми другими USB-драйверами на вашем компьютере, прямое подключение к нему было бы плохой идеей (а также ужасно сложным). WinUSB позволяет напрямую взаимодействовать с определенными типами USB-устройств, но я не думаю, что параллельные порты входят в их число. Проверьте, предоставляет ли производитель вашего USB-> параллельного кабеля API для работы с битами. Например, ftdichip.com/Support/Documents/AppNotes /…
3. Спасибо, что прояснили некоторые вещи. Нет, кабель ее не поддерживает. Я купил delock.com/produkte/gruppen/USB Adapter /… . Я думаю, что тогда я должен получить одну из них.