Windows 7(x86)/10(x64)下用Embarcadero Delphi XE控制LPT端口的问题
LPT端口管理(Delphi XE + Windows 10)问题解答
一、端口地址PortAddr的查看方法
- 没错,你可以在设备管理器的驱动属性「资源」选项卡中找到:
- 打开设备管理器,找到「WCH PCI Express=>DUAL SERIAL&&PARALLEL」设备,展开后选中对应的并行端口
- 右键选「属性」,切换到「资源」标签页
- 在「资源类型」里找到「I/O范围」,对应的起始地址就是PortAddr(比如显示
0x378,转换成十进制就是888,直接填这个数值即可) - 如果看到「使用自动设置」被勾选,先取消勾选就能看到具体的地址分配
二、inpout32.dll在Windows 10的替代方案
inpout32.dll对Win10(尤其是64位系统)兼容性较差,推荐以下几种替代方式:
1. 用WinIo库
WinIo是专门用于硬件I/O端口访问的工具库,支持32/64位Win10,在Delphi中使用步骤:
- 引入winio.dll和对应的头文件
- 核心调用示例:
function InitializeWinIo: Boolean; stdcall; external 'winio.dll'; function ShutdownWinIo: Boolean; stdcall; external 'winio.dll'; function PortOut(PortAddr: Word; Data: Byte): Boolean; stdcall; external 'winio.dll'; function PortIn(PortAddr: Word; var Data: Byte): Boolean; stdcall; external 'winio.dll'; - 注意:程序必须以管理员权限运行,初始化时调用
InitializeWinIo,用完记得调用ShutdownWinIo释放资源
2. 调用扩展卡自带的驱动API
你的WCH扩展卡有自带驱动,建议找厂商提供的SDK或开发文档,这类厂商一般会提供专门的控制库(动态链接库或静态库),直接用厂商的API兼容性和稳定性都更好,还能避免系统权限问题
3. 使用Windows原生并行端口API
Windows自带Win32 API可以直接操作LPT端口,示例代码:
var hLPT: THandle; Data: Byte; BytesWritten: DWORD; begin hLPT := CreateFile('LPT1', GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); if hLPT <> INVALID_HANDLE_VALUE then begin Data := $FF; // 输出高电平,点亮LED WriteFile(hLPT, Data, 1, BytesWritten, nil); Sleep(500); Data := $00; // 输出低电平,熄灭LED WriteFile(hLPT, Data, 1, BytesWritten, nil); CloseHandle(hLPT); end; end;
- 注意:这种方式需要系统把你的扩展卡识别为标准并行端口,可能需要在设备管理器里把设备驱动换成「标准并行端口」,部分第三方扩展卡可能不支持这种方式
内容的提问来源于stack exchange,提问作者Rix1970
相关产品推荐
相关产品推荐

