尝试在运行时添加时资源被删除

时间:2015-03-25 04:12:35

标签: visual-c++ mfc resources

当我尝试在运行时向另一个文件添加资源时,某些早期资源会被删除。请在下面找到源代码:

    void CResourceIncludeSampleDlg::OnBnClickedButton1()
{


    CString strInputFile = _T("C:\\SampleData\\FileToInsert.zip"); // This File is 100 MB

    HANDLE hFile   = CreateFile(strInputFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    DWORD FileSize = GetFileSize(hFile, NULL);

    BYTE *pBuffer = new BYTE[FileSize];
    DWORD dwBytesRead;
    ReadFile(hFile, pBuffer, FileSize, &dwBytesRead, NULL);

    for (int iIndex = 1; iIndex <= 4; iIndex++)
    {
        InsertResource(FileSize, iIndex, pBuffer);
    }

    CloseHandle(hFile);
}

void CResourceIncludeSampleDlg::InsertResource(DWORD FileSize, int iIndex, BYTE *pBuffer)
{
    CString strOutputFile = _T("C:\\SampleData\\ResourceIncludeSample_Source.exe");
    int iResourceID = 300 + iIndex;

    HANDLE hResource = BeginUpdateResource(strOutputFile, FALSE);
    if (INVALID_HANDLE_VALUE != hResource)
    {
        if (UpdateResource(hResource, _T("VIDEOBIN"), MAKEINTRESOURCE(iResourceID), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
                           (LPVOID)pBuffer, FileSize) == TRUE)
        {
            EndUpdateResource(hResource, FALSE);
        }
    }
}

执行完成后,我希望在“VIDEOBIN”类别下添加301,302,303和304输出。但是只存在2个(有时3个)资源。一个资源总是被删除。

您能否告诉我可能出现的问题或解决方法? 非常感谢任何帮助或示例源代码。

谢谢和问候, YKK Reddy

1 个答案:

答案 0 :(得分:0)

关闭文件后需要delete[] pBuffer。它应该是RT_RCDATA而不是_T("VIDEOBIN"),尽管自定义资源名称可能不是导致此特定问题的原因。