Index: src/ch/MainWnd.cpp =================================================================== diff -u -N -rcdf6a22ddf857f56ce2e27e26d8cd6f0b8034b2e -re667429b5d9008da845b7bd146a2581c38551dfd --- src/ch/MainWnd.cpp (.../MainWnd.cpp) (revision cdf6a22ddf857f56ce2e27e26d8cd6f0b8034b2e) +++ src/ch/MainWnd.cpp (.../MainWnd.cpp) (revision e667429b5d9008da845b7bd146a2581c38551dfd) @@ -2084,32 +2084,32 @@ void CMainWnd::OnPopupRegisterdll() { - DWORD dwErr; - if ((dwErr=RegisterShellExtDll(_T("chext.dll"), true)) == 0) + HRESULT hResult = RegisterShellExtDll(_T("chext.dll"), true); + if(SUCCEEDED(hResult)) MsgBox(IDS_REGISTEROK_STRING, MB_ICONINFORMATION | MB_OK); else { TCHAR szStr[256], szText[768]; - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwErr, 0, szStr, 256, NULL); + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hResult, 0, szStr, 256, NULL); while (szStr[_tcslen(szStr)-1] == _T('\n') || szStr[_tcslen(szStr)-1] == _T('\r') || szStr[_tcslen(szStr)-1] == _T('.')) szStr[_tcslen(szStr)-1]=_T('\0'); - _sntprintf(szText, 768, GetResManager()->LoadString(IDS_REGISTERERR_STRING), dwErr, szStr); + _sntprintf(szText, 768, GetResManager()->LoadString(IDS_REGISTERERR_STRING), hResult, szStr); AfxMessageBox(szText, MB_ICONERROR | MB_OK); } } void CMainWnd::OnPopupUnregisterdll() { - DWORD dwErr; - if ((dwErr=RegisterShellExtDll(_T("chext.dll"), false)) == 0) + HRESULT hResult = RegisterShellExtDll(_T("chext.dll"), false); + if(SUCCEEDED(hResult)) MsgBox(IDS_UNREGISTEROK_STRING, MB_ICONINFORMATION | MB_OK); else { TCHAR szStr[256], szText[768]; - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwErr, 0, szStr, 256, NULL); + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hResult, 0, szStr, 256, NULL); while (szStr[_tcslen(szStr)-1] == _T('\n') || szStr[_tcslen(szStr)-1] == _T('\r') || szStr[_tcslen(szStr)-1] == _T('.')) szStr[_tcslen(szStr)-1]=_T('\0'); - _sntprintf(szText, 768, GetResManager()->LoadString(IDS_UNREGISTERERR_STRING), dwErr, szStr); + _sntprintf(szText, 768, GetResManager()->LoadString(IDS_UNREGISTERERR_STRING), hResult, szStr); AfxMessageBox(szText, MB_ICONERROR | MB_OK); } } Index: src/ch/register.cpp =================================================================== diff -u -N -r4c272b19c74694c428c943011f279ec064fbd894 -re667429b5d9008da845b7bd146a2581c38551dfd --- src/ch/register.cpp (.../register.cpp) (revision 4c272b19c74694c428c943011f279ec064fbd894) +++ src/ch/register.cpp (.../register.cpp) (revision e667429b5d9008da845b7bd146a2581c38551dfd) @@ -25,37 +25,29 @@ #define new DEBUG_NEW #endif -DWORD RegisterShellExtDll(LPCTSTR lpszPath, bool bRegister) +HRESULT RegisterShellExtDll(LPCTSTR lpszPath, bool bRegister) { - DWORD dwErr=0; - CoInitialize(NULL); + HRESULT hResult = CoInitialize(NULL); + if(FAILED(hResult)) + return hResult; - HINSTANCE hMod=LoadLibrary(lpszPath); // load the dll - if (hMod != NULL) + HRESULT (STDAPICALLTYPE *pfn)(void); + HINSTANCE hMod = LoadLibrary(lpszPath); // load the dll + if(hMod == NULL) + hResult = HRESULT_FROM_WIN32(GetLastError()); + if(SUCCEEDED(hResult) && !hMod) + hResult = E_FAIL; + if(SUCCEEDED(hResult)) { - HRESULT (STDAPICALLTYPE *pfn)(void); - (FARPROC&)pfn = GetProcAddress(hMod, (bRegister ? "DllRegisterServer" : "DllUnregisterServer")); - if (pfn == NULL || (*pfn)() != S_OK) - { - dwErr=GetLastError(); - CoFreeLibrary(hMod); - CoUninitialize(); - return dwErr; - } - else - { - CoFreeLibrary(hMod); - - // shut down the COM Library. - CoUninitialize(); - return 0; - } + if(pfn == NULL) + hResult = E_FAIL; + if(SUCCEEDED(hResult)) + hResult = (*pfn)(); + + CoFreeLibrary(hMod); } - else - { - dwErr=GetLastError(); - CoUninitialize(); - return dwErr; - } + CoUninitialize(); + + return hResult; } Index: src/ch/register.h =================================================================== diff -u -N -r3493e9fc470285b0a0b417d50be281467a071eb7 -re667429b5d9008da845b7bd146a2581c38551dfd --- src/ch/register.h (.../register.h) (revision 3493e9fc470285b0a0b417d50be281467a071eb7) +++ src/ch/register.h (.../register.h) (revision e667429b5d9008da845b7bd146a2581c38551dfd) @@ -20,6 +20,6 @@ #ifndef __REGISTER_H__ #define __REGISTER_H__ -DWORD RegisterShellExtDll(LPCTSTR lpszPath, bool bRegister); +HRESULT RegisterShellExtDll(LPCTSTR lpszPath, bool bRegister); #endif \ No newline at end of file