You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win32 API下命名管道名称赋值给LPTSTR变量报错如何解决?

Win32 命名管道名称赋值错误修复方案

编译错误E0144原因与修复

LPTSTR 是Win32定义的指向非const TCHAR类型的指针别名,而TEXT()宏包裹的字符串字面量属于常量字符串,类型为const TCHAR*,C++标准不允许隐式将const类型指针赋值给非const类型指针,这是触发E0144错误的根本原因。你之前使用强制类型转换强行剥离const属性属于不安全操作,会留下运行时隐患。

正确的修复方式有两种:

  • 若不需要修改管道名称,直接将变量类型改为匹配常量字符串的LPCTSTR即可:
LPCTSTR lpszPipename = TEXT("\\\\.\\pipe\\mynamedpipe");
  • 若后续需要修改管道名称,将字符串存入可写的TCHAR数组中:
TCHAR szPipename[] = TEXT("\\\\.\\pipe\\mynamedpipe");
// 需要传入LPTSTR参数时,直接传递szPipename即可,数组名会自动退化为LPTSTR类型指针

运行时错误109(ERROR_BROKEN_PIPE)原因与修复

该错误的本质是管道连接被中断,和你之前的强制类型转换没有直接关联,常见触发场景和对应修复方案如下:

  • 服务端还未完成管道实例创建,客户端就提前发起连接:调整代码执行顺序,确保服务端先调用CreateNamedPipe创建管道实例、再调用ConnectNamedPipe监听连接之后,客户端再调用CreateFile发起连接请求
  • 管道任意一端已经关闭了句柄,另一端仍在执行读写操作:每次调用ReadFile/WriteFile执行IO操作前,先校验管道句柄的有效性,收到断开错误时及时清理本地句柄资源
  • 服务端和客户端的字符集配置不匹配:确保两端项目的字符集配置统一,同时使用多字节字符集或者同时使用Unicode字符集,避免TEXT宏生成的字符串编码两端不一致
  • 管道读写的缓冲区长度设置错误:确认读写时传入的缓冲区长度参数和实际缓冲区大小匹配,避免越界读写导致的连接异常断开

内容的提问来源于stack exchange,提问作者anastaciu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 01:54:07