2015-03-25 148 views
0

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

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); 
     } 
    } 
} 

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

您能否让我知道什么可能是错误的或任何修复相同? 任何帮助或示例源代码非常感谢。

感谢和问候, YKK雷迪

回答

0

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

相关问题