Параллельный порт с C # - PullRequest
4 голосов
/ 31 мая 2010

Я пытаюсь отправить данные на порт LPT1 с помощью программы на C #, к сожалению, безуспешно. Я использую Windows 7 x64. Я пробовал и x86 и x64 (inpoutx64.dll) dll's ..

с x64 dll при отправке:

Output(888, 255);

Он просто продолжает программу, так как все прошло нормально, но я не вижу ничего на своем мультиметре (только статический 0,02 В) ..

Я также попробовал следующее с C ++:

int main () {
int val = 0;
printf("Enter a value\n");
scanf("%d", &val);
_outp(0x378, val);
getchar();
_outp(0x378, 0);
return 0; }

Но выдает исключение:

Unhandled exception at 0x01281428 in ppac.exe: 0xC0000096: Privileged instruction.

Я помню, как однажды я сделал что-то подобное на xp (C # не код C ++), я надеюсь, что это возможно и на win7 .. Пожалуйста, помогите мне с этим.

Спасибо.

1 Ответ

6 голосов
/ 31 мая 2010

Порт ввода-вывода в том смысле, в каком он используется _outp, отличается от того, что вы пытаетесь сделать с параллельным портом.Порт ввода-вывода - это способ на уровне процессора для получения необработанного доступа к различным устройствам.Предполагается, что использование портов ввода-вывода с _outp - это то, что делают драйверы устройств.Поэтому он является привилегированным (то есть только ядром) в любой версии Windows, которая достаточно современна , чтобы иметь хорошее разделение ядра / пространства пользователя (а именно, что-либо, основанное на Windows NT).Я почти на 100% уверен, что у вас никогда не было _outp для работы на XP.

Чтобы получить доступ к параллельному порту в высокоуровневом коде, просто откройте его как обычный файл, используя имя файла LPT1:.

...