Simplified COM interface declarations, removing the need to define
[wine] / include / wine / obj_shellfolder.h
1 /*
2  * Defines the COM interfaces and APIs related to IShellFolder
3  *
4  * Depends on 'obj_base.h'.
5  *
6  * Copyright (C) 1999 Juergen Schmied
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 #ifndef __WINE_WINE_OBJ_SHELLFOLDER_H
24 #define __WINE_WINE_OBJ_SHELLFOLDER_H
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* defined(__cplusplus) */
29
30 /****************************************************************************
31 *  STRRET
32 */
33 #define STRRET_WSTR     0x0000
34 #define STRRET_OFFSET   0x0001
35 #define STRRET_CSTR     0x0002
36
37 typedef struct _STRRET {
38   UINT uType;                   /* STRRET_xxx */
39   union {
40     LPWSTR      pOleStr;        /* OLESTR that will be freed */
41     UINT        uOffset;        /* Offset into SHITEMID (ANSI) */
42     char        cStr[MAX_PATH]; /* ANSI Buffer */
43   } DUMMYUNIONNAME;
44 } STRRET,*LPSTRRET;
45
46 /*****************************************************************************
47  * Predeclare the interfaces
48  */
49 typedef struct IShellFolder IShellFolder, *LPSHELLFOLDER;
50
51 typedef struct IPersistFolder IPersistFolder, *LPPERSISTFOLDER;
52
53 DEFINE_GUID(IID_IPersistFolder2, 0x1ac3d9f0L, 0x175C, 0x11D1, 0x95, 0xBE, 0x00, 0x60, 0x97, 0x97, 0xEA, 0x4F);
54 typedef struct IPersistFolder2 IPersistFolder2, *LPPERSISTFOLDER2;
55
56 DEFINE_GUID(IID_IPersistFolder3, 0xcef04fdf, 0xfe72, 0x11d2, 0x87, 0xa5, 0x0, 0xc0, 0x4f, 0x68, 0x37, 0xcf);
57 typedef struct IPersistFolder3 IPersistFolder3, *LPPERSISTFOLDER3;
58
59 DEFINE_GUID(IID_IShellFolder2,  0xB82C5AA8, 0xA41B, 0x11D2, 0xBE, 0x32, 0x0, 0xc0, 0x4F, 0xB9, 0x36, 0x61);
60 typedef struct IShellFolder2 IShellFolder2, *LPSHELLFOLDER2;
61
62 DEFINE_GUID(IID_IEnumExtraSearch,  0xE700BE1, 0x9DB6, 0x11D1, 0xA1, 0xCE, 0x0, 0xc0, 0x4F, 0xD7, 0x5D, 0x13);
63 typedef struct IEnumExtraSearch IEnumExtraSearch, *LPENUMEXTRASEARCH;
64
65 /*****************************************************************************
66  * IEnumExtraSearch interface
67  */
68
69 typedef struct
70 {
71   GUID  guidSearch;
72   WCHAR wszFriendlyName[80];
73   WCHAR wszMenuText[80];
74   WCHAR wszHelpText[MAX_PATH];
75   WCHAR wszUrl[2084];
76   WCHAR wszIcon[MAX_PATH+10];
77   WCHAR wszGreyIcon[MAX_PATH+10];
78   WCHAR wszClrIcon[MAX_PATH+10];
79 } EXTRASEARCH,* LPEXTRASEARCH;
80
81 #define INTERFACE IEnumExtraSearch
82 #define IEnumExtraSearch_METHODS \
83     IUnknown_METHODS \
84     STDMETHOD(Next)(THIS_ ULONG  celt, LPEXTRASEARCH * rgelt, ULONG * pceltFetched) PURE; \
85     STDMETHOD(Skip)(THIS_ ULONG  celt) PURE; \
86     STDMETHOD(Reset)(THIS) PURE; \
87     STDMETHOD(Clone)(THIS_ IEnumExtraSearch ** ppenum) PURE;
88 ICOM_DEFINE(IEnumExtraSearch,IUnknown)
89 #undef INTERFACE
90
91 #ifdef COBJMACROS
92 /*** IUnknown methods ***/
93 #define IEnumIDList_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
94 #define IEnumIDList_AddRef(p)                   (p)->lpVtbl->AddRef(p)
95 #define IEnumIDList_Release(p)                  (p)->lpVtbl->Release(p)
96 /*** IEnumIDList methods ***/
97 #define IEnumIDList_Next(p,a,b,c)               (p)->lpVtbl->Next(p,a,b,c)
98 #define IEnumIDList_Skip(p,a)                   (p)->lpVtbl->Skip(p,a)
99 #define IEnumIDList_Reset(p)                    (p)->lpVtbl->Reset(p)
100 #define IEnumIDList_Clone(p,a)                  (p)->lpVtbl->Clone(p,a)
101 #endif
102
103 /*****************************************************************************
104  * IShellFolder::GetDisplayNameOf/SetNameOf uFlags
105  */
106 typedef enum
107 {       SHGDN_NORMAL            = 0,            /* default (display purpose) */
108         SHGDN_INFOLDER          = 1,            /* displayed under a folder (relative)*/
109         SHGDN_FORPARSING        = 0x8000        /* for ParseDisplayName or path */
110 } SHGNO;
111
112 /*****************************************************************************
113  * IShellFolder::EnumObjects
114  */
115 typedef enum tagSHCONTF
116 {       SHCONTF_FOLDERS         = 32,   /* for shell browser */
117         SHCONTF_NONFOLDERS      = 64,   /* for default view */
118         SHCONTF_INCLUDEHIDDEN   = 128   /* for hidden/system objects */
119 } SHCONTF;
120
121 /*****************************************************************************
122  * IShellFolder::GetAttributesOf flags
123  */
124 #define SFGAO_CANCOPY           DROPEFFECT_COPY /* Objects can be copied */
125 #define SFGAO_CANMOVE           DROPEFFECT_MOVE /* Objects can be moved */
126 #define SFGAO_CANLINK           DROPEFFECT_LINK /* Objects can be linked */
127 #define SFGAO_CANRENAME         0x00000010L     /* Objects can be renamed */
128 #define SFGAO_CANDELETE         0x00000020L     /* Objects can be deleted */
129 #define SFGAO_HASPROPSHEET      0x00000040L     /* Objects have property sheets */
130 #define SFGAO_DROPTARGET        0x00000100L     /* Objects are drop target */
131 #define SFGAO_CAPABILITYMASK    0x00000177L
132 #define SFGAO_LINK              0x00010000L     /* Shortcut (link) */
133 #define SFGAO_SHARE             0x00020000L     /* shared */
134 #define SFGAO_READONLY          0x00040000L     /* read-only */
135 #define SFGAO_GHOSTED           0x00080000L     /* ghosted icon */
136 #define SFGAO_HIDDEN            0x00080000L     /* hidden object */
137 #define SFGAO_DISPLAYATTRMASK   0x000F0000L
138 #define SFGAO_FILESYSANCESTOR   0x10000000L     /* It contains file system folder */
139 #define SFGAO_FOLDER            0x20000000L     /* It's a folder. */
140 #define SFGAO_FILESYSTEM        0x40000000L     /* is a file system thing (file/folder/root) */
141 #define SFGAO_HASSUBFOLDER      0x80000000L     /* Expandable in the map pane */
142 #define SFGAO_CONTENTSMASK      0x80000000L
143 #define SFGAO_VALIDATE          0x01000000L     /* invalidate cached information */
144 #define SFGAO_REMOVABLE         0x02000000L     /* is this removeable media? */
145 #define SFGAO_BROWSABLE         0x08000000L     /* is in-place browsable */
146 #define SFGAO_NONENUMERATED     0x00100000L     /* is a non-enumerated object */
147 #define SFGAO_NEWCONTENT        0x00200000L     /* should show bold in explorer tree */
148
149 /************************************************************************
150  *
151  * FOLDERSETTINGS
152 */
153
154 typedef LPBYTE LPVIEWSETTINGS;
155
156 /* NB Bitfields. */
157 /* FWF_DESKTOP implies FWF_TRANSPARENT/NOCLIENTEDGE/NOSCROLL */
158 typedef enum
159 { FWF_AUTOARRANGE =       0x0001,
160   FWF_ABBREVIATEDNAMES =  0x0002,
161   FWF_SNAPTOGRID =        0x0004,
162   FWF_OWNERDATA =         0x0008,
163   FWF_BESTFITWINDOW =     0x0010,
164   FWF_DESKTOP =           0x0020,
165   FWF_SINGLESEL =         0x0040,
166   FWF_NOSUBFOLDERS =      0x0080,
167   FWF_TRANSPARENT  =      0x0100,
168   FWF_NOCLIENTEDGE =      0x0200,
169   FWF_NOSCROLL     =      0x0400,
170   FWF_ALIGNLEFT    =      0x0800,
171   FWF_SINGLECLICKACTIVATE=0x8000  /* TEMPORARY -- NO UI FOR THIS */
172 } FOLDERFLAGS;
173
174 typedef enum
175 { FVM_ICON =              1,
176   FVM_SMALLICON =         2,
177   FVM_LIST =              3,
178   FVM_DETAILS =           4
179 } FOLDERVIEWMODE;
180
181 typedef struct
182 { UINT ViewMode;       /* View mode (FOLDERVIEWMODE values) */
183   UINT fFlags;         /* View options (FOLDERFLAGS bits) */
184 } FOLDERSETTINGS, *LPFOLDERSETTINGS;
185
186 typedef const FOLDERSETTINGS * LPCFOLDERSETTINGS;
187
188 /************************************************************************
189  * Desktopfolder
190  */
191
192 extern IShellFolder * pdesktopfolder;
193
194 DWORD WINAPI SHGetDesktopFolder(IShellFolder * *);
195
196 /*****************************************************************************
197  * IShellFolder interface
198  */
199 #define INTERFACE IShellFolder
200 #define IShellFolder_METHODS \
201     IUnknown_METHODS \
202     STDMETHOD(ParseDisplayName)(THIS_ HWND  hwndOwner,LPBC  pbcReserved, LPOLESTR  lpszDisplayName, ULONG  * pchEaten, LPITEMIDLIST  * ppidl, ULONG  * pdwAttributes) PURE; \
203     STDMETHOD(EnumObjects)(THIS_ HWND  hwndOwner, DWORD  grfFlags, LPENUMIDLIST  * ppenumIDList) PURE;\
204     STDMETHOD(BindToObject)(THIS_ LPCITEMIDLIST  pidl, LPBC  pbcReserved, REFIID  riid, LPVOID  * ppvOut) PURE;\
205     STDMETHOD(BindToStorage)(THIS_ LPCITEMIDLIST  pidl, LPBC  pbcReserved, REFIID  riid, LPVOID  * ppvObj) PURE;\
206     STDMETHOD(CompareIDs)(THIS_ LPARAM  lParam, LPCITEMIDLIST  pidl1, LPCITEMIDLIST  pidl2) PURE;\
207     STDMETHOD(CreateViewObject)(THIS_ HWND  hwndOwner, REFIID  riid, LPVOID  * ppvOut) PURE;\
208     STDMETHOD(GetAttributesOf)(THIS_ UINT  cidl, LPCITEMIDLIST  * apidl, ULONG  * rgfInOut) PURE;\
209     STDMETHOD(GetUIObjectOf)(THIS_ HWND  hwndOwner, UINT  cidl, LPCITEMIDLIST  * apidl, REFIID  riid, UINT  * prgfInOut, LPVOID  * ppvOut) PURE;\
210     STDMETHOD(GetDisplayNameOf)(THIS_ LPCITEMIDLIST  pidl, DWORD  uFlags, LPSTRRET  lpName) PURE;\
211     STDMETHOD(SetNameOf)(THIS_ HWND  hwndOwner, LPCITEMIDLIST  pidl,LPCOLESTR  lpszName, DWORD  uFlags,LPITEMIDLIST  * ppidlOut) PURE;
212 ICOM_DEFINE(IShellFolder,IUnknown)
213 #undef INTERFACE
214
215 #ifdef COBJMACROS
216 /*** IUnknown methods ***/
217 #define IShellFolder_QueryInterface(p,a,b)              (p)->lpVtbl->QueryInterface(p,a,b)
218 #define IShellFolder_AddRef(p)                          (p)->lpVtbl->AddRef(p)
219 #define IShellFolder_Release(p)                         (p)->lpVtbl->Release(p)
220 /*** IShellFolder methods ***/
221 #define IShellFolder_ParseDisplayName(p,a,b,c,d,e,f)    (p)->lpVtbl->ParseDisplayName(p,a,b,c,d,e,f)
222 #define IShellFolder_EnumObjects(p,a,b,c)               (p)->lpVtbl->EnumObjects(p,a,b,c)
223 #define IShellFolder_BindToObject(p,a,b,c,d)            (p)->lpVtbl->BindToObject(p,a,b,c,d)
224 #define IShellFolder_BindToStorage(p,a,b,c,d)           (p)->lpVtbl->BindToStorage(p,a,b,c,d)
225 #define IShellFolder_CompareIDs(p,a,b,c)                (p)->lpVtbl->CompareIDs(p,a,b,c)
226 #define IShellFolder_CreateViewObject(p,a,b,c)          (p)->lpVtbl->CreateViewObject(p,a,b,c)
227 #define IShellFolder_GetAttributesOf(p,a,b,c)           (p)->lpVtbl->GetAttributesOf(p,a,b,c)
228 #define IShellFolder_GetUIObjectOf(p,a,b,c,d,e,f)       (p)->lpVtbl->GetUIObjectOf(p,a,b,c,d,e,f)
229 #define IShellFolder_GetDisplayNameOf(p,a,b,c)          (p)->lpVtbl->GetDisplayNameOf(p,a,b,c)
230 #define IShellFolder_SetNameOf(p,a,b,c,d,e)             (p)->lpVtbl->SetNameOf(p,a,b,c,d,e)
231 #endif
232
233 /*****************************************************************************
234  * IShellFolder2 interface
235  */
236 /* IShellFolder2 */
237
238 /* GetDefaultColumnState */
239 typedef enum
240 {
241         SHCOLSTATE_TYPE_STR     = 0x00000001,
242         SHCOLSTATE_TYPE_INT     = 0x00000002,
243         SHCOLSTATE_TYPE_DATE    = 0x00000003,
244         SHCOLSTATE_TYPEMASK     = 0x0000000F,
245         SHCOLSTATE_ONBYDEFAULT  = 0x00000010,
246         SHCOLSTATE_SLOW         = 0x00000020,
247         SHCOLSTATE_EXTENDED     = 0x00000040,
248         SHCOLSTATE_SECONDARYUI  = 0x00000080,
249         SHCOLSTATE_HIDDEN       = 0x00000100
250 } SHCOLSTATE;
251
252 typedef struct
253 {
254         GUID    fmtid;
255         DWORD   pid;
256 } SHCOLUMNID, *LPSHCOLUMNID;
257 typedef const SHCOLUMNID* LPCSHCOLUMNID;
258
259 /* GetDetailsEx */
260 #define PID_FINDDATA            0
261 #define PID_NETRESOURCE         1
262 #define PID_DESCRIPTIONID       2
263
264 typedef struct
265 {
266         int     fmt;
267         int     cxChar;
268         STRRET  str;
269 } SHELLDETAILS, *LPSHELLDETAILS;
270
271 #define INTERFACE IShellFolder2
272 #define IShellFolder2_METHODS \
273     IShellFolder_METHODS \
274     STDMETHOD(GetDefaultSearchGUID)(THIS_ LPGUID  lpguid) PURE;\
275     STDMETHOD(EnumSearches)(THIS_ LPENUMEXTRASEARCH  * ppEnum) PURE; \
276     STDMETHOD(GetDefaultColumn)(THIS_ DWORD  dwReserved, ULONG  * pSort, ULONG  * pDisplay) PURE;\
277     STDMETHOD(GetDefaultColumnState)(THIS_ UINT  iColumn, DWORD  * pcsFlags) PURE;\
278     STDMETHOD(GetDetailsEx)(THIS_ LPCITEMIDLIST  pidl, const SHCOLUMNID  * pscid, VARIANT  * pv) PURE;\
279     STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST  pidl, UINT  iColumn, LPSHELLDETAILS  pDetails) PURE;\
280     STDMETHOD(MapNameToSCID)(THIS_ LPCWSTR  pwszName, SHCOLUMNID  * pscid) PURE;
281 ICOM_DEFINE(IShellFolder2, IShellFolder)
282 #undef INTERFACE
283
284 #ifdef COBJMACROS
285 /*** IUnknown methods ***/
286 #define IShellFolder2_QueryInterface(p,a,b)             (p)->lpVtbl->QueryInterface(p,a,b)
287 #define IShellFolder2_AddRef(p)                         (p)->lpVtbl->AddRef(p)
288 #define IShellFolder2_Release(p)                        (p)->lpVtbl->Release(p)
289 /*** IShellFolder methods ***/
290 #define IShellFolder2_ParseDisplayName(p,a,b,c,d,e,f)   (p)->lpVtbl->ParseDisplayName(p,a,b,c,d,e,f)
291 #define IShellFolder2_EnumObjects(p,a,b,c)              (p)->lpVtbl->EnumObjects(p,a,b,c)
292 #define IShellFolder2_BindToObject(p,a,b,c,d)           (p)->lpVtbl->BindToObject(p,a,b,c,d)
293 #define IShellFolder2_BindToStorage(p,a,b,c,d)          (p)->lpVtbl->BindToStorage(p,a,b,c,d)
294 #define IShellFolder2_CompareIDs(p,a,b,c)               (p)->lpVtbl->CompareIDs(p,a,b,c)
295 #define IShellFolder2_CreateViewObject(p,a,b,c)         (p)->lpVtbl->CreateViewObject(p,a,b,c)
296 #define IShellFolder2_GetAttributesOf(p,a,b,c)          (p)->lpVtbl->GetAttributesOf(p,a,b,c)
297 #define IShellFolder2_GetUIObjectOf(p,a,b,c,d,e,f)      (p)->lpVtbl->GetUIObjectOf(p,a,b,c,d,e,f)
298 #define IShellFolder2_GetDisplayNameOf(p,a,b,c)         (p)->lpVtbl->GetDisplayNameOf(p,a,b,c)
299 #define IShellFolder2_SetNameOf(p,a,b,c,d,e)            (p)->lpVtbl->SetNameOf(p,a,b,c,d,e)
300 /*** IShellFolder2 methods ***/
301 #define IShellFolder2_GetDefaultSearchGUID(p,a)         (p)->lpVtbl->GetDefaultSearchGUID(p,a)
302 #define IShellFolder2_EnumSearches(p,a)                 (p)->lpVtbl->EnumSearches(p,a)
303 #define IShellFolder2_GetDefaultColumn(p,a,b,c)         (p)->lpVtbl->GetDefaultColumn(p,a,b,c)
304 #define IShellFolder2_GetDefaultColumnState(p,a,b)      (p)->lpVtbl->GetDefaultColumnState(p,a,b)
305 #define IShellFolder2_GetDetailsEx(p,a,b,c)             (p)->lpVtbl->GetDetailsEx(p,a,b,c)
306 #define IShellFolder2_GetDetailsOf(p,a,b,c)             (p)->lpVtbl->GetDetailsOf(p,a,b,c)
307 #define IShellFolder2_MapNameToSCID(p,a,b)              (p)->lpVtbl->MapNameToSCID(p,a,b)
308 #endif
309
310 /*****************************************************************************
311  * IPersistFolder interface
312  */
313
314 #define INTERFACE IPersistFolder
315 #define IPersistFolder_METHODS \
316     IPersist_METHODS \
317     STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST  pidl) PURE;
318 ICOM_DEFINE(IPersistFolder, IPersist)
319 #undef INTERFACE
320
321 #ifdef COBJMACROS
322 /*** IUnknown methods ***/
323 #define IPersistFolder_QueryInterface(p,a,b)    (p)->lpVtbl->QueryInterface(p,a,b)
324 #define IPersistFolder_AddRef(p)                (p)->lpVtbl->AddRef(p)
325 #define IPersistFolder_Release(p)               (p)->lpVtbl->Release(p)
326 /*** IPersist methods ***/
327 #define IPersistFolder_GetClassID(p,a)          (p)->lpVtbl->GetClassID(p,a)
328 /*** IPersistFolder methods ***/
329 #define IPersistFolder_Initialize(p,a)          (p)->lpVtbl->Initialize(p,a)
330 #endif
331
332 /*****************************************************************************
333  * IPersistFolder2 interface
334  */
335
336 #define INTERFACE IPersistFolder2
337 #define IPersistFolder2_METHODS \
338     IPersistFolder_METHODS \
339     STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST * pidl) PURE;
340 ICOM_DEFINE(IPersistFolder2, IPersistFolder)
341 #undef INTERFACE
342
343 #ifdef COBJMACROS
344 /*** IUnknown methods ***/
345 #define IPersistFolder2_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)
346 #define IPersistFolder2_AddRef(p)               (p)->lpVtbl->AddRef(p)
347 #define IPersistFolder2_Release(p)              (p)->lpVtbl->Release(p)
348 /*** IPersist methods ***/
349 #define IPersistFolder2_GetClassID(p,a)         (p)->lpVtbl->GetClassID(p,a)
350 /*** IPersistFolder methods ***/
351 #define IPersistFolder2_Initialize(p,a)         (p)->lpVtbl->Initialize(p,a)
352 /*** IPersistFolder2 methods ***/
353 #define IPersistFolder2_GetCurFolder(p,a)       (p)->lpVtbl->GetCurFolder(p,a)
354 #endif
355
356
357 /*****************************************************************************
358  * IPersistFolder3 interface
359  */
360
361 typedef struct {
362         LPITEMIDLIST    pidlTargetFolder;
363         WCHAR           szTargetParsingName[MAX_PATH];
364         WCHAR           szNetworkProvider[MAX_PATH];
365         DWORD           dwAttributes;
366         int             csidl;
367 } PERSIST_FOLDER_TARGET_INFO;
368
369 #define INTERFACE IPersistFolder3
370 #define IPersistFolder3_METHODS \
371     IPersistFolder2_METHODS \
372     STDMETHOD(InitializeEx)(THIS_ IBindCtx * pbc, LPCITEMIDLIST  pidlRoot, const PERSIST_FOLDER_TARGET_INFO * ppfti) PURE;\
373     STDMETHOD(GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO * ppfti) PURE;
374 ICOM_DEFINE(IPersistFolder3, IPersistFolder2)
375 #undef INTERFACE
376
377 #ifdef COBJMACROS
378 /*** IUnknown methods ***/
379 #define IPersistFolder3_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)
380 #define IPersistFolder3_AddRef(p)               (p)->lpVtbl->AddRef(p)
381 #define IPersistFolder3_Release(p)              (p)->lpVtbl->Release(p)
382 /*** IPersist methods ***/
383 #define IPersistFolder3_GetClassID(p,a)         (p)->lpVtbl->GetClassID(p,a)
384 /*** IPersistFolder methods ***/
385 #define IPersistFolder3_Initialize(p,a)         (p)->lpVtbl->Initialize(p,a)
386 /*** IPersistFolder2 methods ***/
387 #define IPersistFolder3_GetCurFolder(p,a)       (p)->lpVtbl->GetCurFolder(p,a)
388 /*** IPersistFolder3 methods ***/
389 #define IPersistFolder3_InitializeEx(p,a,b,c)   (p)->lpVtbl->InitializeEx(p,a,b,c)
390 #define IPersistFolder3_GetFolderTargetInfo(p,a) (p)->lpVtbl->InitializeEx(p,a)
391 #endif
392
393
394 #ifdef __cplusplus
395 } /* extern "C" */
396 #endif /* defined(__cplusplus) */
397
398 #endif /* __WINE_WINE_OBJ_SHELLFOLDER_H */