13,864
社区成员




TResourceStream* rs;
rs = new TResourceStream((int)Hinstance, AnsiString("RS_EXE_FILE"), "EXEFILE"); //这里提示找不到资源“RS_EXE_FILE”
rs->SaveToFile(AnsiString(dstExeFile));
----------
//资源标识符 资源类型 资源的路径
RS_EXE_FILE EXEFILE "D:\incExeRsCB2k7\t1.exe"
src1.rc 文件编译成功(编译过程中没报错,EXE文件内容在其中,编译成.res文件)
谢谢各位! 找到 问题 所在了。。。释放成功!。。
我少了 HINSTANCE hInstance = GetModuleHandle(NULL); 这一行。。。
C++Builder什么版本?
以下是一些可能的原因和解决方法:
资源文件是否正确链接
确保你的资源文件(.res)已经正确链接到你的项目中。通常,你需要在项目设置中指定资源文件的路径。
资源标识符是否正确
确保资源标识符 RS_EXE_FILE 和资源类型 EXEFILE 在资源文件中定义正确,并且与代码中使用的标识符一致。
资源文件路径是否正确
确保资源文件路径 D:\incExeRsCB2k7\t1.exe 是正确的,并且文件存在。
项目设置
确保你的项目设置中正确包含了资源文件。在 C++ Builder 或 Delphi 中,通常需要在项目选项中指定资源文件。
代码示例
以下是一个完整的示例,展示了如何从资源文件中加载资源并保存到文件:
资源文件 src1.rc
RS_EXE_FILE EXEFILE "D:\incExeRsCB2k7\t1.exe"
编译资源文件
使用 brcc32 或 rc 命令编译资源文件:
brcc32 src1.rc
这将生成 src1.res 文件。
项目设置
确保在项目设置中包含 src1.res 文件。在 C++ Builder 中,可以在项目选项中添加资源文件。
代码示例
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include <windows.h>
#include <sysutils.hpp>
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
TResourceStream* rs;
HINSTANCE hInstance = GetModuleHandle(NULL);
try
{
rs = new TResourceStream((int)hInstance, "RS_EXE_FILE", RT_RCDATA);
rs->SaveToFile("D:\\output\\t1.exe");
}
catch (Exception &e)
{
ShowMessage(e.Message);
}
delete rs;
return 0;
}
解释
资源文件:确保资源文件 src1.rc 中的资源标识符和类型正确。
编译资源文件:使用 brcc32 或 rc 命令编译资源文件,生成 src1.res。
项目设置:在项目设置中包含 src1.res 文件。
代码:使用 TResourceStream 从资源文件中加载资源,并保存到指定文件。
常见问题
资源标识符不匹配:确保资源文件中的标识符与代码中使用的标识符一致。
资源类型不匹配:确保资源类型 RT_RCDATA 与资源文件中定义的类型一致。
路径问题:确保资源文件路径正确,文件存在。
(NativeUInt)HInstance