读书人

怎么把win32中的资源释放到本地

发布时间: 2012-06-16 20:34:32 作者: rapoo

如何把win32中的资源释放到本地
我再做一个win32应用程序,要把资源库中的资源释放到本地,要怎么做啊,在网上找到的例子都是mfc的求大神们帮帮忙

[解决办法]
MSDN上的
http://msdn.microsoft.com/en-us/library/windows/desktop/ms648008(v=vs.85).aspx#_win32_Updating_Resources

C/C++ code
char szBuffer[80]; // print buffer for EnumResourceTypes DWORD cbWritten;   // number of bytes written to res. info. file size_t cbString;      // length of string in sprintfHRESULT hResult; // Declare callback functions. BOOL EnumTypesFunc(     HANDLE hModule,     LPTSTR lpType,     LONG lParam);  BOOL EnumNamesFunc(     HANDLE hModule,     LPCTSTR lpType,     LPTSTR lpName,     LONG lParam);  BOOL EnumLangsFunc(     HANDLE hModule,     LPCTSTR lpType,     LPCTSTR lpName,     WORD wLang,     LONG lParam);  // Load the .EXE whose resources you want to list. hExe = LoadLibrary("hand.exe"); if (hExe == NULL) {// Add code to fail as securely as possible.    return;}  // Create a file to contain the resource info. hFile = CreateFile("resinfo.txt",      // name of file     GENERIC_READ | GENERIC_WRITE,      // access mode     0,                                 // share mode     (LPSECURITY_ATTRIBUTES) NULL,      // default security     CREATE_ALWAYS,                     // create flags     FILE_ATTRIBUTE_NORMAL,             // file attributes     (HANDLE) NULL);                    // no template if (hFile == INVALID_HANDLE_VALUE) {     ErrorHandler("Could not open file."); }  // Find all of the loaded file's resources.hResult = StringCchPrintf(szBuffer, 80/sizeof(TCHAR),  // cbString = sprintf(szBuffer,     "The file contains the following resources:\n\n");if (FAILED(hResult))    {    // Add code to fail as securely as possible.    return;    }hResult = StringCchLength(szBuffer, 80/sizeof(TCHAR), cbString);if (FAILED(hResult))    {    // Add code to fail as securely as possible.    return;    } WriteFile(hFile,           // file to hold resource info.     szBuffer,              // what to write to the file     (DWORD) cbString,      // number of bytes in szBuffer     &cbWritten,            // number of bytes written     NULL);                 // no overlapped I/O  EnumResourceTypes(hExe,              // module handle     (ENUMRESTYPEPROC)EnumTypesFunc,  // callback function     0);                              // extra parameter // Unload the executable file whose resources were // enumerated and close the file created to contain // the resource information. FreeLibrary(hExe); CloseHandle(hFile);  //    FUNCTION: EnumTypesFunc(HANDLE, LPSTR, LONG) // //    PURPOSE:  Resource type callback BOOL EnumTypesFunc(     HANDLE hModule,   // module handle     LPTSTR lpType,    // address of resource type     LONG lParam)      // extra parameter, could be                       // used for error checking {     size_t cbString;    HRESULT hResult;         // Write the resource type to a resource information file.     // The type may be a string or an unsigned decimal     // integer, so test before printing.     if ((ULONG)lpType & 0xFFFF0000)     {         hResult = StringCchPrintf(szBuffer, 80/sizeof(TCHAR), "Type: %s\n", lpType);        if (FAILED(hResult))        {        // Add code to fail as securely as possible.            return;        }    // cbString = sprintf(szBuffer, "Type: %s\n", lpType);     }     else     {        hResult = StringCchPrintf(szBuffer, 80/sizeof(TCHAR), "Type: %u\n", (USHORT)lpType);        if (FAILED(hResult))        {        // Add code to fail as securely as possible.            return;        }//        cbString = sprintf(szBuffer, "Type: %u\n", (USHORT)lpType);     }  hResult = StringCchLength(szBuffer, 80/sizeof(TCHAR), cbString);    if (FAILED(hResult))        {        // Add code to fail as securely as possible.            return;        }     WriteFile(hFile, szBuffer, (DWORD) cbString,         &cbWritten, NULL);     // Find the names of all resources of type lpType.     EnumResourceNames(hModule,         lpType,         (ENUMRESNAMEPROC)EnumNamesFunc,         0);      return TRUE; }  //    FUNCTION: EnumNamesFunc(HANDLE, LPSTR, LPSTR, LONG) // //    PURPOSE:  Resource name callback BOOL EnumNamesFunc(     HANDLE hModule,   // module handle     LPCTSTR lpType,   // address of resource type     LPTSTR lpName,    // address of resource name     LONG lParam)      // extra parameter, could be                       // used for error checking {     size_t cbString;     HRESULT hResult;         // Write the resource name to a resource information file.      // The name may be a string or an unsigned decimal      // integer, so test before printing.     if ((ULONG)lpName & 0xFFFF0000)     {        hResult = StringCchPrintf(szBuffer, 80/sizeof(TCHAR), "\tName: %s\n", lpName);        if (FAILED(hResult))        {        // Add code to fail as securely as possible.            return;        }//        cbString = sprintf(szBuffer, "\tName: %s\n", lpName);     }     else     {        hResult = StringCchPrintf(szBuffer, 80/sizeof(TCHAR), "\tName: %u\n", (USHORT)lpName);        if (FAILED(hResult))        {        // Add code to fail as securely as possible.            return;        } //        cbString = sprintf(szBuffer, "\tName: %u\n",             (USHORT)lpName);     }    hResult = StringCchLength(szBuffer, 80/sizeof(TCHAR), cbString);    if (FAILED(hResult))        {        // Add code to fail as securely as possible.            return;        }      WriteFile(hFile, szBuffer, (DWORD) cbString,         &cbWritten, NULL);      // Find the languages of all resources of type      // lpType and name lpName.     EnumResourceLanguages(hModule,         lpType,         lpName,         (ENUMRESLANGPROC)EnumLangsFunc,         0);      return TRUE; }  //    FUNCTION: EnumLangsFunc(HANDLE, LPSTR, LPSTR, WORD, LONG) // //    PURPOSE:  Resource language callback BOOL EnumLangsFunc(     HANDLE hModule,  // module handle     LPCTSTR lpType,  // address of resource type     LPCTSTR lpName,  // address of resource name     WORD wLang,      // resource language     LONG lParam)     // extra parameter, could be                      // used for error checking {     HANDLE hResInfo;     char szBuffer[80];     size_t cbString = 0;     HRESULT hResult;     hResInfo = FindResourceEx(hModule, lpType, lpName, wLang);     // Write the resource language to the resource information file.    hResult = StringCchPrintf(szBuffer, 80/sizeof(TCHAR), "\t\tLanguage: %u\n", (USHORT) wLang);        if (FAILED(hResult))        {        // Add code to fail as securely as possible.            return;        }        hResult = StringCchLength(szBuffer, 80/sizeof(TCHAR), cbString);    if (FAILED(hResult))        {        // Add code to fail as securely as possible.            return;        } //    cbString = sprintf(szBuffer, "\t\tLanguage: %u\n", (USHORT)wLang);     WriteFile(hFile, szBuffer, (DWORD) cbString,         &cbWritten, NULL);     // Write the resource handle and size to buffer.     cbString = sprintf(szBuffer,         "\t\thResInfo == %lx,  Size == %lu\n\n",         hResInfo,         SizeofResource(hModule, hResInfo));     WriteFile(hFile, szBuffer, (DWORD) cbString,         &cbWritten, NULL);     return TRUE; } 

读书人网 >C++

热点推荐