You need to enable JavaScript to run this app. C++创建文件映射对象时GENERIC_READ报too many initializer values错误
优惠活动
大模型
产品
解决方案
定价
更多

C++创建文件映射对象时GENERIC_READ报too many initializer values错误

问题原因及解决方案

你遇到的编译错误和GENERIC_READ参数本身无关,是代码语法错误导致的:你尝试接收CreateFileAPI返回值的写法不符合C++语法,被编译器错误识别为函数声明。
你写的HANDLE CreateFile(开头的代码段,编译器会解析为「声明一个返回HANDLE类型、名为CreateFile的函数」,但你括号内填写的都是调用API的实参值,不是函数声明要求的参数类型列表,完全不符合语法规范,因此抛出类型不匹配、初始化参数过多的错误,这也是你修改参数值、替换CreateFileA都无法解决问题的原因。

修复方案

将代码修改为「定义变量+赋值接收API返回值」的格式,你需要给接收句柄的变量起一个独立名称(不要和API名CreateFile重名),示例如下:

// 定义名为hFile的HANDLE变量,接收CreateFileW的返回值
HANDLE hFile = CreateFileW(
    L"filename.txt",
    GENERIC_READ,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL
);

补充注意事项

  • 调用CreateFile类API后,必须通过返回值是否为INVALID_HANDLE_VALUE判断调用是否成功,不要用NULL判断,API执行失败时返回的是INVALID_HANDLE_VALUE而非空指针
  • 文件句柄使用完毕后,必须调用CloseHandle(hFile)释放资源,避免句柄泄漏
  • 如果你代码中使用了L前缀的宽字符文件名,明确调用CreateFileW可以避免不同编译环境下UNICODE宏未定义导致的类型不匹配问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 03:45:03