1 2 3 #pragma warning(disable : 4996) 4 5 #include <windows.h> 6 #include <stdlib.h> 7 8 #include "ttwain_state.h" 9 #include "ttwainP.h" 10 #include "ttwain_statePD.h" 11 #include "ttwain_util.h" 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 static void *hDSMLib; /* handle of DSM */ 18 extern void TTWAIN_SetState(TWAINSTATE status); 19 TTWAIN_LoadSourceManagerPD(void)20int TTWAIN_LoadSourceManagerPD(void) { 21 char winDir[_MAX_PATH]; 22 23 if (TTWAIN_GetState() >= TWAIN_SM_LOADED) 24 return TRUE; /* DSM already loaded */ 25 26 GetWindowsDirectory(winDir, _MAX_PATH); 27 if (!winDir[0]) return FALSE; 28 29 strcat(winDir, "\\system32\\"); 30 // strcat(winDir, "\\"); 31 strcat(winDir, DSM_FILENAME); 32 33 hDSMLib = LoadLibrary(winDir); 34 35 /* 36 if (tnz_access(winDir, 0x00) != -1) 37 hDSMLib = LoadLibrary(winDir); 38 else 39 { 40 hDSMLib = 0; 41 return FALSE; 42 } 43 */ 44 45 if (hDSMLib) { 46 TTwainData.DSM_Entry = 47 (DSMENTRYPROC)GetProcAddress(hDSMLib, DSM_ENTRYPOINT); 48 if (TTwainData.DSM_Entry) { 49 TTWAIN_SetAvailable(AVAIABLE_YES); 50 TTWAIN_SetState(TWAIN_SM_LOADED); 51 } else { 52 FreeLibrary(hDSMLib); 53 hDSMLib = NULL; 54 } 55 } else { 56 DWORD err = GetLastError(); 57 TTwainData.DSM_Entry = 0; 58 } 59 return (TTWAIN_GetState() >= TWAIN_SM_LOADED); 60 } 61 /*---------------------------------------------------------------------------*/ TTWAIN_UnloadSourceManagerPD(void)62int TTWAIN_UnloadSourceManagerPD(void) { 63 if (TTWAIN_GetState() == TWAIN_SM_LOADED) { 64 if (hDSMLib) { 65 FreeLibrary(hDSMLib); 66 hDSMLib = NULL; 67 } 68 TTwainData.DSM_Entry = NULL; 69 TTWAIN_SetState(TWAIN_PRESESSION); 70 } 71 return (TTWAIN_GetState() == TWAIN_PRESESSION); 72 } 73 /*---------------------------------------------------------------------------*/ 74 75 #ifdef __cplusplus 76 } 77 #endif 78