Member 12915728 Ответов: 1

Лучший способ получить доступ к портам с помощью C++ под windows 10 ?


Пожалуйста, поделитесь информацией о том, как функционально получить доступ к портам в Windows 10 с помощью C++ (скомпилированного с g++).

Пожалуйста, включите все файлы #include и код, необходимые для тестирования программирования контактов параллельного порта ввода-вывода.

Спасибо

Что я уже пробовал:

/*** Following Code Compiles but DOES NOT modify ports ***/

#include <stdio.h>
#include <conio.h>
#include <windows.h>


/* Definitions in the build of inpout32.dll are:            */
/*   short _stdcall Inp32(short PortAddress);               */
/*   void _stdcall Out32(short PortAddress, short data);    */
/* prototype (function typedef) for DLL function Inp32: */

     typedef short _stdcall (*inpfuncPtr)(short portaddr);
     typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)
{
     HINSTANCE hLib;
     inpfuncPtr inp32;
     oupfuncPtr oup32;

     short x;
     int i;

     /* Load the library */
     hLib = LoadLibrary("inpout32.dll");

     if (hLib == NULL) {
          printf("LoadLibrary Failed.\n");
          return -1;
     }

     /* get the address of the function */

     inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

     if (inp32 == NULL) {
          printf("GetProcAddress for Inp32 Failed.\n");
          return -1;
     }

     oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

     if (oup32 == NULL) {
          printf("GetProcAddress for Oup32 Failed.\n");
          return -1;
     }

/***************************************************************/
/* now test the functions */

     /* Try to read 0x378..0x37F, LPT1:  */

     for (i=0x378; (i<0x380); i++) {

          x = (inp32)(i);

          printf("port read (%04X)= %04X\n",i,x);
     }

     /*****  Write the data register */

     i=0x378;
     x=0x77;

     (oup32)(i,x);

     printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

     /***** And read back to verify  */
     x = (inp32)(i);
     printf("port read (%04X)= %04X\n",i,x);

     /*****  One more time, different value */

     i=0x378;
     x=0xAA;

     (oup32)(i,x);

     printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

     /***** And read back to verify  */
     x = (inp32)(i);
     printf("port read (%04X)= %04X\n",i,x);

/*****  One more time, different value */

     i=0x378;
     x=15;

     (oup32)(i,x);

     printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

     /***** And read back to verify  */
     x = (inp32)(i);
     printf("port read (%04X)= %04X\n",i,x);

     FreeLibrary(hLib);
     return 0;
}

/*** Output ***

port read (0378)= 0078
port read (0379)= 0079
port read (037A)= 007A
port read (037B)= 007B
port read (037C)= 007C
port read (037D)= 007D
port read (037E)= 007E
port read (037F)= 007F
port write to 0x378, datum=0x77
port read (0378)= 0078
port write to 0x378, datum=0xAA
port read (0378)= 0078
port write to 0x378, datum=0x F
port read (0378)= 0078

Process returned 0 (0x0)   execution time : 0.029 s
Press any key to continue.

***/

Rick York

Я бы начал с поиска статей о "параллельном порте" на этом сайте. Я сделал это и нашел большое количество статей. Вот один из них : https://www.codeproject.com/Articles/15020/Reading-from-Parallel-Port-using-Inpout-dll

Этот использует VB, но это только начало. Вы могли бы посмотреть, будет ли он даже работать на вашей машине в качестве доказательства принципа.

Jochen Arndt

Может быть глупый вопрос:
Есть ли в вашей системе параллельный порт и включен ли он в BIOS?

Большинство современных систем (использование Windows 10 указывает на то, что ваша не старая) больше не имеют параллельного порта. Некоторые могут иметь его в чипсете, но отключают его в BIOS без опции включения, когда он не маршрутизируется к разъему.

Или вы используете конвертер USB-to-parallel-port?

1 Ответов

Рейтинг:
2

KarstenK

Я лично предпочитаю другие API, такие как WriteFile который также работает с COM-портами. Ссылка является хорошей отправной точкой для получения обзора с некоторыми ссылками на пример кода.

Взгляните также на эту замечательную статью о Последовательная библиотека для C++.