WinIoTest.cpp
上传用户:ason123
上传日期:2010-03-31
资源大小:177k
文件大小:1k
源码类别:

并口编程

开发平台:

C++ Builder

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include "winio.h"
  4. void main()
  5. {
  6.   DWORD dwPortVal;
  7.   DWORD dwMemVal;
  8.   bool bResult;
  9.   HANDLE hPhysicalMemory;
  10.   PBYTE pbLinAddr;
  11.   // Call InitializeWinIo to initialize the WinIo library.
  12.   bResult = InitializeWinIo();
  13.   if (bResult)
  14.   {
  15.     // Under Windows NT/2000/XP, after calling InitializeWinIo,
  16.     // you can call _inp/_outp instead of using GetPortVal/SetPortVal
  17.     GetPortVal(0x378, &dwPortVal, 4);
  18.     SetPortVal(0x378, 10, 4);
  19.     // Map physical addresses 0xA0000 - 0xAFFFF into the linear address space
  20.     // of the application. The value returned from the call to MapPhysToLin is
  21.     // a linear address corresponding to physical address 0xA0000. In case of
  22.     // an error, the return value is NULL.
  23.     pbLinAddr = MapPhysToLin((PBYTE)0xA0000, 65536, &hPhysicalMemory);
  24.     if (pbLinAddr)
  25.     {
  26.       // Now we can use pbLinAddr to access physical address 0xA0000
  27.       *pbLinAddr = 10;
  28.       // When you're done with pbLinAddr, call UnmapPhysicalMemory
  29.       UnmapPhysicalMemory(hPhysicalMemory, pbLinAddr);
  30.     }
  31.     // Instead of using MapPhysToLin, we can use GetPhysLong/SetPhysLong
  32.     GetPhysLong((PBYTE)0xA0000, &dwMemVal);
  33.     SetPhysLong((PBYTE)0xA0000, 10);
  34.     // When you're done using WinIo, call ShutdownWinIo
  35.     ShutdownWinIo();
  36.   }
  37.   else
  38.   {
  39.     printf("Error during initialization of WinIo.n");
  40.     exit(1);
  41.   }
  42. }