- New (some stubs): SHGetFolderLocation, PathAddExtension,
[wine] / dlls / commdlg / generic.c
1 /*
2  * COMMDLG/COMDLG32 functions
3  *
4  * Copyright 1994 Martin Ayotte
5  * Copyright 1996 Albrecht Kleine
6  * Copyright 1998,1999 Bertho Stultiens
7  * Copyright 1999 Klaas van Gend
8  */
9
10 #include "winbase.h"
11 #include "commdlg.h"
12 #include "debugtools.h"
13
14 DEFAULT_DEBUG_CHANNEL(commdlg)
15
16 #include "cdlg.h"
17
18 HINSTANCE16     COMMDLG_hInstance = 0;
19 HINSTANCE       COMMDLG_hInstance32 = 0;
20 static int      COMMDLG_Attach = 0;
21
22 /***********************************************************************
23  *      COMMDLG_DllEntryPoint                   [COMMDLG.entry]
24  *
25  *    Initialization code for the COMMDLG DLL
26  *
27  * RETURNS:
28  */
29 BOOL WINAPI COMMDLG_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst, WORD ds, WORD HeapSize, DWORD res1, WORD res2)
30 {
31         TRACE("(%08lx, %04x, %04x, %04x, %08lx, %04x)\n", Reason, hInst, ds, HeapSize, res1, res2);
32         switch(Reason)
33         {
34         case DLL_PROCESS_ATTACH:
35                 COMMDLG_Attach++;
36                 if(COMMDLG_hInstance)
37                 {
38                         ERR("commdlg.dll instantiated twice!\n");
39                         /*
40                          * We should return FALSE here, but that will break
41                          * most apps that use CreateProcess because we do
42                          * not yet support seperate address-spaces.
43                          */
44                         return TRUE;
45                 }
46
47                 COMMDLG_hInstance = hInst;
48                 if(!COMMDLG_hInstance32)
49                 {
50                         if(!(COMMDLG_hInstance32 = LoadLibraryA("comdlg32.dll")))
51                         {
52                                 ERR("Could not load sibling comdlg32.dll\n");
53                                 return FALSE;
54                         }
55                 }
56                 break;
57
58         case DLL_PROCESS_DETACH:
59                 if(!--COMMDLG_Attach)
60                 {
61                         COMMDLG_hInstance = 0;
62                         if(COMMDLG_hInstance32)
63                                 FreeLibrary(COMMDLG_hInstance32);
64                 }
65                 break;
66         }
67         return TRUE;
68 }
69
70
71 /***********************************************************************
72  *      CommDlgExtendedError16                  [COMMDLG.26]
73  *
74  * Get the last error value if a commdlg function fails.
75  *      RETURNS
76  *              Current error value which might not be valid
77  *              if a previous call succeeded.
78  */
79 DWORD WINAPI CommDlgExtendedError16(void)
80 {
81         return CommDlgExtendedError();
82 }