gpt4 book ai didi

c++ - 如何正确使用 FindResourceW()?

转载 作者:行者123 更新时间:2023-11-27 23:50:05 28 4
gpt4 key购买 nike

这里有一个简单的例子 我想将一些嵌入的文本文件加载到我的应用程序但是当我使用 FindResourceW 时我得到编译时错误:

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

// NOTE: providing g_hInstance is important, NULL might not work
res = FindResourceW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(MY_RESOURCE), RT_RCDATA);
if (!res)
return 1;

在我的 .rc 文件中,我这样定义资源:

MY_RESOURCE RCDATA    L"Help topics.txt"

错误:

Severity Code Description Project File Line Error C2664 'HRSRC FindResourceW(HMODULE,LPCWSTR,LPCWSTR)': cannot convert argument 3 from 'LPSTR' to 'LPCWSTR' FindFilesProj C:\Users\WongFei\Desktop\FindFilesProj UNICODE\WinMain.cpp 674

最佳答案

您正在使用 RT_RCDATA,其定义为:

#define RT_RCDATA           MAKEINTRESOURCE(10)

MAKEINTRESOURCE() 定义为:

#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
#ifdef UNICODE
#define MAKEINTRESOURCE MAKEINTRESOURCEW
#else
#define MAKEINTRESOURCE MAKEINTRESOURCEA
#endif // !UNICODE

您有一个未定义 UNICODE 的项目。所以 MAKEINTRESOURCE() 返回一个 char*FindeResourceW() 想要一个 wchar_t*。因此编译器错误。当未定义 UNICODE 时,您不能按原样将 RT_RCDATAFindResourceW() 结合使用。

使用 FindResource() 而不是 FindResourceW()。这确保 MAKEINTRESOURCE() 返回一个与 FindResource() 期望相同类型(UNICODE 或非 UNICODE)的指针:

res = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(MY_RESOURCE), RT_RCDATA);

否则,您必须将 RT_RCDATA 类型转换为 wchar_t* 以匹配 FindResourceW() 期望的内容:

 res = FindResourceW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(MY_RESOURCE), (LPWSTR)RT_RCDATA);

类型转换是安全的。

请记住,您的资源以您创建它的方式存储。可能需要将其转换为您需要的适当字符模式。

关于c++ - 如何正确使用 FindResourceW()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47180184/

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