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

WinInet上传文件调用HttpOpenRequest出现访问违规该如何解决?

问题原因分析

你出现访问违规的核心错误是HttpOpenRequest的第6个参数(接受类型参数)传入方式错误:

  • 该参数要求传入的是以NULL结尾的const char*类型数组的首指针,类型为LPCSTR*也就是const char**
  • 你直接将字符串字面量"*/*\0"强制转换为const char**传入,相当于把字符串本身存储的字符值当成了内存地址去读取,你遇到的错误地址0x002A2F2A刚好对应ASCII字符*(0x2A)、/(0x2F)、*(0x2A)的拼接值,就是这个错误操作直接导致的内存访问违规。
修正方案

首先定义符合要求的接受类型数组,再传入函数即可:

HINTERNET aInternet=InternetOpen("My-Custom-Agent/1.0",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
HINTERNET aConnect=InternetConnect(aInternet,"www.myserver.com",INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
if (aConnect)
{
    // 先定义以NULL结尾的接受类型数组
    const char* acceptTypes[] = {"*/*", NULL};
    // 直接传入数组名即可,不需要强制类型转换
    HINTERNET aRequest=HttpOpenRequest(aConnect, "POST","myphppage.php", NULL, NULL, acceptTypes,0,1);
    // 后续业务逻辑
}

之前使用InternetOpenURL没有出现问题,是因为该函数不需要手动传入接受类型数组参数,内部已经做了默认处理,所以没有触发这个参数传递错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:05