C++ MSVC中的资源++;2013
我想以C++ MSVC中的资源++;2013,c++,visual-c++,visual-studio-2013,C++,Visual C++,Visual Studio 2013,我想以字符*或向量或文件的形式访问我的资源。我尝试了下面的方法,结果无效。我不明白为什么。第一个参数是我从文档页面获取的最后一个参数。RT_RCDATA似乎是我想要的。IDK为什么我得到空值 HRSRC rc = FindResourceEx(0, RT_RCDATA, MAKEINTRESOURCE(IDR_MyResource), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)); 我得到错误1813。我有一个没有DLL的可执行文件。资源位于可执行文件中
字符*
或向量或文件的形式访问我的资源。我尝试了下面的方法,结果无效。我不明白为什么。第一个参数是我从文档页面获取的最后一个参数。RT_RCDATA似乎是我想要的。IDK为什么我得到空值
HRSRC rc = FindResourceEx(0, RT_RCDATA, MAKEINTRESOURCE(IDR_MyResource), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL));
我得到错误1813。我有一个没有DLL的可执行文件。资源位于可执行文件中2件事:
根据文档应该是MAKEINTRESOURCE(RT\u RCDATA)
RT\u RCDATA
- 第一个参数是保存资源的二进制文件(DLL/exe)的句柄,NULL表示可执行文件
- 回答(我希望)这个问题,这个答案适用于
FindResource
,不过您可以适应findresourcex
FindResource
的参数是要搜索的模块、id和类型
- 第一个是实例句柄,它指定要搜索的资源表。您可以对正在运行的进程使用
,否则这是在DLL中,您需要从DllMain保存实例句柄,通常是在全局NULL
中,并将其用于搜索目标ghInst
- 第二个应该是您的资源id。如果您使用的是宏id,例如来自
头的宏id,则必须使用resource.h
包装该id。否则,它与您用于资源id的字符串(作为字符串)相同MAKEINTRESOURCE(id)
- 第三是资源类型。当您声明自定义资源时,您在资源脚本中为它指定了一个类型(例如,类似于MYRES;Ex:我将XML用于XML文件)。
参数将该值作为字符串type
MYDATA
的idmyu id
(取自包含的resource.h
id文件)的自定义资源将是:
HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(MY_ID), _T("MYDATA"));
类似地,假设您将DLL的实例句柄保存到DllMain
的PROCESS\u ATTACH
中的某个全局ghInst
,则从DLL资源表加载相同的资源是:
HRSRC hRes = FindResource(ghInst, MAKEINTRESOURCE(MY_ID), _T("MYDATA"));
缺少ID “忘记”在资源脚本和C/C++代码中包含的.h文件中正确声明用于资源的标识符并不少见,但资源脚本仍然可以编译。如果资源脚本中包含以下内容
MY_ID MYDATA "filename.bin"
而MY_ID
不是通过宏定义为数字ID并包含在资源脚本中的,这将在输出资源表中“命名”一个名为“MY_ID”
(注意它是一个字符串)的资源。更糟糕的是,如果id定义宏正确地包含在试图加载此内容的C/C++代码中,那么:
HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(MY_ID), _T("MYDATA"));
将编译,因为C/C++代码的MY_ID
正确可用,但生成的ID与资源文件中使用的ID不同,后者是字符串名称。因此,负载将失效。发生这种情况的可靠迹象是,如果失败:
HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(MY_ID), _T("MYDATA"));
但这是可行的:
HRSRC hRes = FindResource(NULL, _T("MY_ID"), _T("MYDATA"));
如果发现是这种情况,请确保.rc文件和C/C++代码对资源标识符使用相同的宏。它不能只是同一个“名字”。它必须是同一个宏。如果宏对资源编译器不可用,它将使用名称作为字符串,这通常不是您想要的
祝您好运。资源位于哪个二进制文件中?NULL意味着可执行性使用,以理解其failing@MarcoA.:错误1813未找到它。有人建议使用10。我查找了我正在使用的RT_RCDATA及其。。。10IDK怎么了on@acidzombie24.rc文件中的资源类型是什么?。.rc行的格式应为
ID类型filepath
。类型的字符串是什么?@WhozCraig:我不确定这是我的rc文件,这是否意味着我应该使用MAKEINTRESOURCE(“v2”)
?它也不起作用。我仍然得到1813作为我的最后一个错误啊,我做了改变,我仍然得到1813,这是未找到的资源。我只有一个可执行文件,资源就在其中。这是一个控制台应用程序,我不知道如何获取实例,但无论如何,资源是最重要的executable@acidzombie24很高兴这有帮助。我很遗憾地意识到,在当前的文档中,有一系列厌食症患者这样做的例子。具有讽刺意味的是,在很久以前的3.0/3.1/95天,它被更好地放大了。在我发布的3m中,我发现了如何完成代码的其余部分,即访问原始数据和获取资源的大小。这是多么可笑的文档和谷歌已经为这一功能的可怕。我以前有一个win32.hlp文件或类似的文件名。不幸的是,hlp从vistaNote开始就不再工作了。你可以使用RT\u RCDATA
等。如果设置得当,我发现命名资源类型更容易。每一种都有它的好处,但我很少这样做,我选择了脑死亡(对我来说,思考越少越好)。