【问题标题】:C++ too many initializer values on GENERIC_READ when creating a file mapping object [closed]创建文件映射对象时,GENERIC_READ 上的 C++ 初始化值过多 [关闭]
【发布时间】:2021-09-29 01:35:50
【问题描述】:

我正在尝试创建文件映射对象,但遇到了一些编译器错误。 (我正在使用 MinGW GCC-8.2.0-3)

我从 VS 代码中收到以下错误:too many initializer values 位于 GENERIC_READ 行。

HANDLE CreateFile(
    L"filename.txt",
    GENERIC_READ,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL
);

编译项目时出现以下错误:

main.cpp: In function 'int main()':
main.cpp:18:5: error: expression list treated as compound expression in initializer [-fpermissive]
     );
     ^
main.cpp:18:5: error: invalid conversion from 'int' to 'HANDLE' {aka 'void*'} [-fpermissive]

我尝试用GENERIC_READ | GENERIC_WRITE 替换GENERIC_READ,但too many initializer value 的错误仍然存​​在,但仅在GENERIC_READ 下。我尝试过的另一件事是用CreateFileA 替换CreateFile。我包括Windows.h

我真的很困惑为什么会发生这种情况,因为在WIN32 API Documentation 下它指出对于dwDesiredAccess,它通常用作GENERIC_READGENERIC_WRITEGENERIC_READ | GENERIC_WRITE

提前致谢!

【问题讨论】:

  • HANDLE h = CreateFile(...)?
  • 这解决了这个问题,谢谢!
  • 能否请您发布您的代码,以便我们尝试重现?或者,如果您关注this example,会发生什么?

标签: c++ file-mapping


【解决方案1】:

感谢@Jarod42 的回答。

我必须将文件句柄分配给一个变量:

HANDLE fileHandle = CreateFile(
    _T("combatlog.txt"),
    GENERIC_READ,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL
);

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多