TResourceStream()提示找不到资源

牧牛童子 2024-12-06 23:26:44

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文件)

...全文
93 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧牛童子 2024-12-07
  • 打赏
  • 举报
回复

谢谢各位! 找到 问题 所在了。。。释放成功!。。
我少了 HINSTANCE hInstance = GetModuleHandle(NULL); 这一行。。。

  • 举报
回复
@牧牛童子 RTL里面直接有HInstance这个变量(SysInit.hpp),可以直接使用,不需要再取一次~
ooolinux 2024-12-07
  • 打赏
  • 举报
回复

C++Builder什么版本?

牧牛童子 2024-12-07
  • 举报
回复
@ooolinux c++builder2007 和 C++Builder12.2 两个版本都试过。。。上面贴的是 CBuilder2007的代码。
ooolinux 2024-12-07
  • 举报
回复
@牧牛童子 2007是AnsiString
  • 打赏
  • 举报
回复

以下是一些可能的原因和解决方法:

  1. 资源文件是否正确链接
    确保你的资源文件(.res)已经正确链接到你的项目中。通常,你需要在项目设置中指定资源文件的路径。

  2. 资源标识符是否正确
    确保资源标识符 RS_EXE_FILE 和资源类型 EXEFILE 在资源文件中定义正确,并且与代码中使用的标识符一致。

  3. 资源文件路径是否正确
    确保资源文件路径 D:\incExeRsCB2k7\t1.exe 是正确的,并且文件存在。

  4. 项目设置
    确保你的项目设置中正确包含了资源文件。在 C++ Builder 或 Delphi 中,通常需要在项目选项中指定资源文件。

  5. 代码示例
    以下是一个完整的示例,展示了如何从资源文件中加载资源并保存到文件:

资源文件 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 与资源文件中定义的类型一致。
路径问题:确保资源文件路径正确,文件存在。

牧牛童子 2024-12-07
  • 举报
回复 1
@牧牛童子 我是工程里直接 添加 的 src1.rc 文件。。。在Debug目里,编译之后,能看到 src1.res ; 而且 也验证过 res确实加入了 程序EXE里(从工程里删除src1.rc,编译出来的EXE体积 变小了)
牧牛童子 2024-12-07
  • 举报
回复 1
@w(゚Д゚)w吓洗宝宝了 感谢 你的 帮助。。。是从你的 示例里 到 找 问题所在的。。
  • 举报
回复 1
@牧牛童子 不客气
1条回复
  • 打赏
  • 举报
回复

(NativeUInt)HInstance

13,864

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧