#include #include #include "faxutil.h" #include #include #include #include "..\admin\faxres\resource.h" extern "C" { static HINSTANCE g_hResInst = NULL; HINSTANCE WINAPI GetResInstance(HINSTANCE hModule) /////////////////////////////////////////////////////////////////////////////////////// // Function: // GetResInstance // // Purpose: // Load FxsRes.dll // FxsRes.dll should be freed with FreeResInstance // // Params: // hModule [in] module handle // // Return Value: // handle of FxsRes.dll or NULL /////////////////////////////////////////////////////////////////////////////////////// { return GetResInst(FAX_RES_FILE, hModule); } // GetResInstance HINSTANCE WINAPI GetResInst( LPCTSTR pResFile, HINSTANCE hModule ) /////////////////////////////////////////////////////////////////////////////////////// // Function: // GetResInstance // // Purpose: // Load file and store the handle in the global g_hResInst // The file should be freed with FreeResInstance // // Params: // pResFile [in] resource DLL file name // hModule [in] module handle // Return Value: // handle to the loaded file or NULL /////////////////////////////////////////////////////////////////////////////////////// { DEBUG_FUNCTION_NAME(TEXT("GetResInst")); if(!pResFile) { return NULL; } if(!g_hResInst) { g_hResInst = LoadLibraryFromLocalFolder(pResFile,hModule); if(!g_hResInst) { DebugPrintEx(DEBUG_ERR,TEXT("LoadLibrary(%s) failed with %d"), pResFile, GetLastError()); // // Try to load with the standard search algorithm // g_hResInst = LoadLibrary(pResFile); if(!g_hResInst) { DebugPrintEx(DEBUG_ERR,TEXT("LoadLibrary(%s) failed with %d"), pResFile, GetLastError()); } } } return g_hResInst; } // GetResInst /////////////////////////////////////////////////////////////////////////////////////// // Function: // LoadLibraryFromLocalFolder // // Purpose: // Loads a library from the local folder as the calling process. // // Params: // LPCTSTR lpctstrModuleName [in] DLL to load file name (with extension e.g FXSAPI.DLL) // HINSTANCE hModule [in] module handle // Return Value: // handle to the loaded file or NULL /////////////////////////////////////////////////////////////////////////////////////// HINSTANCE WINAPI LoadLibraryFromLocalFolder(LPCTSTR lpctstrModuleName,HINSTANCE hModule) { DWORD dwRes = 0; TCHAR szLibraryName[MAX_PATH] = {0}; TCHAR szModuleName[MAX_PATH] = {0}; TCHAR szDrive[_MAX_DRIVE] = {0}; TCHAR szDir[MAX_PATH] = {0}; HMODULE hRetModule = NULL; DEBUG_FUNCTION_NAME(TEXT("LoadLibraryFromLocalFolder")); if(!lpctstrModuleName) { return NULL; } dwRes = GetModuleFileName(hModule,szModuleName,ARR_SIZE(szModuleName)-1); if(0 == dwRes) { DebugPrintEx(DEBUG_ERR,TEXT("GetModuleFileName failed with %d"), GetLastError()); return NULL; } _tsplitpath(szModuleName, szDrive, szDir, NULL, NULL); _sntprintf(szLibraryName, ARR_SIZE(szLibraryName)-1, TEXT("%s%s%s"), szDrive, szDir, lpctstrModuleName); hRetModule = LoadLibrary(szLibraryName); if(!hRetModule) { DebugPrintEx(DEBUG_ERR,TEXT("LoadLibrary(%s) failed with %d"), szLibraryName, GetLastError()); return NULL; } return hRetModule; } void WINAPI FreeResInstance(void) { if(g_hResInst) { FreeLibrary(g_hResInst); g_hResInst = NULL; } } UINT WINAPI GetErrorStringId(DWORD ec) { DWORD uMsgId; switch (ec) { case RPC_S_INVALID_BINDING: case EPT_S_CANT_PERFORM_OP: case RPC_S_ADDRESS_ERROR: case RPC_S_CALL_CANCELLED: case RPC_S_CALL_FAILED: case RPC_S_CALL_FAILED_DNE: case RPC_S_COMM_FAILURE: case RPC_S_NO_BINDINGS: case RPC_S_SERVER_TOO_BUSY: case RPC_S_SERVER_UNAVAILABLE: uMsgId = IDS_ERR_CONNECTION_FAILED; break; case FAX_ERR_DIRECTORY_IN_USE: uMsgId = IDS_ERR_DIRECTORY_IN_USE; break; case ERROR_NOT_ENOUGH_MEMORY: uMsgId = IDS_ERR_NO_MEMORY; break; case ERROR_ACCESS_DENIED: uMsgId = IDS_ERR_ACCESS_DENIED; break; case ERROR_PATH_NOT_FOUND: uMsgId = IDS_ERR_FOLDER_NOT_FOUND; break; case FAXUI_ERROR_DEVICE_LIMIT: case FAX_ERR_DEVICE_NUM_LIMIT_EXCEEDED: uMsgId = IDS_ERR_DEVICE_LIMIT; break; case FAXUI_ERROR_INVALID_RING_COUNT: uMsgId = IDS_ERR_INVALID_RING_COUNT; break; case FAXUI_ERROR_SELECT_PRINTER: uMsgId = IDS_ERR_SELECT_PRINTER; break; case FAXUI_ERROR_NAME_IS_TOO_LONG: uMsgId = IDS_ERR_NAME_IS_TOO_LONG; break; case FAXUI_ERROR_INVALID_RETRIES: uMsgId = IDS_ERR_INVALID_RETRIES; break; case FAXUI_ERROR_INVALID_RETRY_DELAY: uMsgId = IDS_ERR_INVALID_RETRY_DELAY; break; case FAXUI_ERROR_INVALID_DIRTY_DAYS: uMsgId = IDS_ERR_INVALID_DIRTY_DAYS; break; case FAXUI_ERROR_INVALID_TSID: uMsgId = IDS_ERR_INVALID_TSID; break; case FAXUI_ERROR_INVALID_CSID: uMsgId = IDS_ERR_INVALID_CSID; break; default: uMsgId = IDS_ERR_OPERATION_FAILED; break; } return uMsgId; } // GetErrorStringId } // extern "C"