文件操作 - 释放DLL资源到指定目录
1 =============== Windows资源文件的读取 =============== 2 3 Windows资源操作函数 4 12 LoadAccelerators 加载快捷键资源 5 6 14 LoadBitmap 加载位图资源 7 8 16 LoadCursor 加载光标资源 9 10 18 LoadIcon 加载图标资源 11 12 20 LoadMenu 加载菜单资源 13 14 22 LoadString 加载字符串资源 15 16 17 Windows资源操作函数
29 FindResource 从指定模块中加载指定名称、类型的资源 18 19 31 SizeofResource 获取资源数据的长度 20 21 33 LoadResource 加载指定的资源至内存 22 23 35 LockResource 锁定指定的资源,并返回指向资源数据的指针 24 25 37 FreeResource 释放指定的资源 26 27 39 我们通常加载某个资源的步骤如下所示: 28 41 使用LoadLibrary()加载模块,或者获取当前应用程序的模块。 29 30 43 调用FindResource()从指定模块中查找指定的资源,返回该资源的句柄。 31 32 45 调用SizeofResource ()获取资源数据的长度。 33 34 47 调用LoadResource()将资源加载至内存。 35 36 49 调用LockResource()锁定资源,并返回指向资源数据的指针。 37 38 51 通过数据指针操作数据。 39 40 53 使用完毕,调用FreeResource()释放指定的资源。 41 42 // 释放【DLL文件】到指定的文件夹 43 BOOL ReleaseDLLRes(LPCTSTR szDLLFullPath, UINT uResID, LPCTSTR szResType) 44 { 45 if (uResID<=0 || !szResType) 46 { 47 return FALSE; 48 } 49 50 HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(uResID), szResType); 51 if ( NULL == hRsrc ) 52 { 53 return FALSE; 54 } 55 56 DWORD dwSize = SizeofResource(NULL, hRsrc); 57 if ( dwSize <= 0) 58 { 59 return FALSE; 60 } 61 62 HGLOBAL hGlobal = LoadResource(NULL, hRsrc); 63 if ( NULL == hGlobal ) 64 { 65 return FALSE; 66 } 67 68 LPVOID pBuffer = LockResource(hGlobal); 69 if ( NULL ==pBuffer ) 70 { 71 return FALSE; 72 } 73 74 HANDLE hFile = CreateFile(szDLLFullPath, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 75 if (INVALID_HANDLE_VALUE == hFile ) 76 { 77 return FALSE; 78 } 79 80 81 DWORD dwWrited = 0; 82 if (FALSE == WriteFile(hFile, pBuffer, dwSize, &dwWrited, NULL) ) 83 { 84 AfxMessageBox(_T("写入失败!")); 85 return FALSE; 86 } 87 88 CloseHandle(hFile); 89 UnlockResource(hGlobal); 90 FreeResource(hGlobal); 91 return TRUE; 92 }