Лучший способ получить доступ к портам с помощью 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?