gpt4 book ai didi

c++ - 对于类型为 RCDATA 的文本文件,FindResource 调用返回 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:17 26 4
gpt4 key购买 nike

我正在编写一个需要处理大量数据的 C++ 程序,特别是文本文件,但数据的长度超过了给定的字符串限制。因此,我试图将文本文件作为资源文件加载,但是每当我调用 FindResource 时,响应都是空句柄。

我查看了其他堆栈溢出帖子,MSDN 尝试正确实现此功能,但我尝试过的任何操作都没有返回有效句柄。

C++代码:

HGLOBAL     res_handle = NULL;
HRSRC res;
char * res_data;
DWORD res_size;

auto g_hInstance = GetModuleHandle(NULL);
res = FindResource(g_hInstance, MAKEINTRESOURCE(MY_RESOURCE), RT_RCDATA);
std::cout << res << std::endl;
std::cout << GetLastError() << std::endl;
res_handle = LoadResource(NULL, res);
std::cout << GetLastError() << std::endl;
res_data = (char*)LockResource(res_handle);
std::cout << GetLastError() << std::endl;
res_size = SizeofResource(NULL, res);
std::cout << GetLastError() << std::endl;

输出:

0000000000000000
1813
87
87
87

资源.h:

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Resource.rc
//
#define MY_RESOURCE 300
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40002
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

资源.rc:

MY_RESOURCE RCDATA "C:\\Users\\foobar\\Desktop\\projects\\foobar\\test0.txt"

最佳答案

这对我有用。我怀疑您的build设置出了问题。

我从 Visual Studio 2017 中的一个空项目开始,我在项目设置中唯一更改的是配置属性 > 常规 > 字符集 >“使用 Unicode 字符集”

源.cpp

#include <iostream>
#include <Windows.h>
#include "resource.h"

int main() {
auto hinst = ::GetModuleHandleW(NULL);
std::cout << hinst << std::endl;
auto hrsrc = ::FindResourceW(hinst, MAKEINTRESOURCE(IDTHING), RT_RCDATA);
std::cout << hrsrc << std::endl;
auto hglob = ::LoadResource(hinst, hrsrc);
std::cout << hglob << std::endl;
return 0;
}

资源.h

#define IDTHING 300

资源.rc

#include "resource.h"

IDTHING RCDATA "C:\\Windows\\notepad.exe"

我完全避免了 VS 中所有自动生成的资源内容,只是将它们写为纯文本文件。

如果你在调试器中运行,在hglob赋值后停止并将其值放入内存窗口,我可以清楚地看到notepad.exe的PE头。

关于c++ - 对于类型为 RCDATA 的文本文件,FindResource 调用返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57103181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com