|
MFC资源加载函数,增加了错误处理、资源释放和编码兼容性:
优化后的代码增加了多语言资源支持、UTF-8编码处理、完善的错误日志和资源释放机制。
- bool CTESTEDGEDlg::LoadResourceToCString(UINT nID, LPCTSTR lpType, CString& strOut) {
- // 1. 查找资源
- HRSRC hRes = FindResourceEx(nullptr, lpType, MAKEINTRESOURCE(nID), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL));
- if(!hRes) {
- TRACE(_T("资源查找失败 ID:%d 类型:%s\n"), nID, lpType);
- return false;
- }
- // 2. 加载资源
- HGLOBAL hData = LoadResource(nullptr, hRes);
- if(!hData) {
- TRACE(_T("资源加载失败\n"));
- return false;
- }
- // 3. 锁定资源
- LPVOID pData = LockResource(hData);
- if(!pData) {
- FreeResource(hData);
- return false;
- }
- // 4. 处理资源数据
- DWORD dwSize = SizeofResource(nullptr, hRes);
- if(dwSize == 0) {
- FreeResource(hData);
- return false;
- }
- // 5. 转换编码(处理UTF-8资源)
- if(_tcsicmp(lpType, _T("HTML")) == 0) {
- CStringA utf8Str((LPCSTR)pData, dwSize);
- strOut = CA2T(utf8Str, CP_UTF8);
- } else {
- strOut.SetString((LPCTSTR)pData, dwSize / sizeof(TCHAR));
- }
- // 6. 调试输出
- #ifdef _DEBUG
- TRACE(_T("加载资源成功,大小:%d字节\n"), dwSize);
- #endif
- // 7. 释放资源
- FreeResource(hData);
- return true;
- }
复制代码
|
|