【问题标题】:Retrieving a resource file from an exe从 exe 中检索资源文​​件
【发布时间】:2010-03-04 15:15:04
【问题描述】:

我正在使用 Visual C++ 2008 包装文件,我已经知道如何嵌入它们,但我不知道如何检索它们。我有一些 C++ 经验,但没有使用 Win32 或 Visual C++。包装的目的是运行一些代码,然后如果一切正常,它就可以运行嵌入的文件。

我包装了许多不同的文件,因此代码重用是关键,而且在所有情况下我都不知道嵌入文件的名称。但是我可以将 exe 命名为与包装文件相同的名称,因此如果程序可以获取自身的名称,那也可以。

一些打包的文件将是 exe,而其他文件将是由外部程序运行的文件。

编辑:这些文件嵌入到 .res 文件中,它们不只是连接到 exe 的末尾。

【问题讨论】:

    标签: c++ winapi word-wrap


    【解决方案1】:

    所以你有一个作为资源嵌入到 EXE 中的二进制文件,并且你想读取该文件?

    尝试这样的事情(非常粗略,在 MSDN 上查找函数以获得正确的参数):

    HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(id), type);
    HGLOBAL hGlobal = LoadResource(NULL, hResource);
    BYTE* pData = (BYTE*)LockResource(hGlobal);
    int size = SizeofResource(NULL, hResource);
    // ... do something with pData and size, eg write to disk ...
    FreeResource(hGlobal); // done with data
    

    您需要在其中添加一些错误检查!

    【讨论】:

    • 您可能想要修复您的变量用法。 theResource->hResource, theData->hGlobal...
    • 糟糕,这就是我太快复制粘贴另一个应用程序的结果。固定...
    • 对于第一行,我的 id 为“test.exe”,类型为 RT_RCDATA。它编译但根据调试器 hResource 为空。我不确定出了什么问题...
    • 你检查 GetLastError() 了吗?
    【解决方案2】:

    您需要了解的主要内容(应该存在于编译为 .res 文件的 .RC 文件中)是资源的名称。由此,您可以使用FindResourceLoadResource 加载数据。您显然会将该数据写入一个临时文件并执行该文件。

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多