2015-03-25 152 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"),但自定義資源名稱可能不是此特定問題的原因。

相關問題