/* * COMMDLG/COMDLG32 functions * * Copyright 1994 Martin Ayotte * Copyright 1996 Albrecht Kleine * Copyright 1998,1999 Bertho Stultiens * Copyright 1999 Klaas van Gend */ #include "winbase.h" #include "commdlg.h" #include "debug.h" DEFAULT_DEBUG_CHANNEL(commdlg) #include "cdlg.h" HINSTANCE16 COMMDLG_hInstance = 0; HINSTANCE COMMDLG_hInstance32 = 0; static int COMMDLG_Attach = 0; /*********************************************************************** * COMMDLG_DllEntryPoint [COMMDLG.entry] * * Initialization code for the COMMDLG DLL * * RETURNS: */ BOOL WINAPI COMMDLG_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst, WORD ds, WORD HeapSize, DWORD res1, WORD res2) { TRACE(commdlg, "(%08lx, %04x, %04x, %04x, %08lx, %04x)\n", Reason, hInst, ds, HeapSize, res1, res2); switch(Reason) { case DLL_PROCESS_ATTACH: COMMDLG_Attach++; if(COMMDLG_hInstance) { ERR(commdlg, "commdlg.dll instantiated twice!\n"); /* * We should return FALSE here, but that will break * most apps that use CreateProcess because we do * not yet support seperate address-spaces. */ return TRUE; } COMMDLG_hInstance = hInst; if(!COMMDLG_hInstance32) { if(!(COMMDLG_hInstance32 = LoadLibraryA("comdlg32.dll"))) { ERR(commdlg, "Could not load sibling comdlg32.dll\n"); return FALSE; } } break; case DLL_PROCESS_DETACH: if(!--COMMDLG_Attach) { COMMDLG_hInstance = 0; if(COMMDLG_hInstance32) FreeLibrary(COMMDLG_hInstance32); } break; } return TRUE; } /*********************************************************************** * CommDlgExtendedError16 [COMMDLG.26] * * Get the last error value if a commdlg function fails. * RETURNS * Current error value which might not be valid * if a previous call succeeded. */ DWORD WINAPI CommDlgExtendedError16(void) { return CommDlgExtendedError(); }