[PSDK]
authorThomas Faber <thomas.faber@reactos.org>
Mon, 19 Oct 2015 15:28:24 +0000 (15:28 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Mon, 19 Oct 2015 15:28:24 +0000 (15:28 +0000)
- Add missing shlobj.h changes from the previous commit
- Correctly define ITEMIDLIST types, and add initial support for STRICT_TYPED_ITEMIDS
CORE-8441 #resolve

svn path=/trunk/; revision=69621

reactos/include/psdk/shlobj.h
reactos/include/psdk/shtypes.idl

index e229adc..820b1ad 100644 (file)
@@ -2139,10 +2139,10 @@ typedef struct
 {
   HWND hwnd;
   IContextMenuCB *pcmcb;
-  LPCITEMIDLIST pidlFolder;
+  PCIDLIST_ABSOLUTE pidlFolder;
   IShellFolder *psf;
   UINT cidl;
-  LPCITEMIDLIST* apidl;
+  PCUITEMID_CHILD_ARRAY apidl;
   IUnknown *punkAssociationInfo;
   UINT cKeys;
   const HKEY *aKeys;
@@ -2167,10 +2167,10 @@ typedef HRESULT
 HRESULT
 WINAPI
 CDefFolderMenu_Create2(
-  _In_opt_ LPCITEMIDLIST,
+  _In_opt_ PCIDLIST_ABSOLUTE,
   _In_opt_ HWND,
   UINT cidl,
-  _In_reads_opt_(cidl) LPCITEMIDLIST*,
+  _In_reads_opt_(cidl) PCUITEMID_CHILD_ARRAY,
   _In_opt_ IShellFolder*,
   _In_opt_ LPFNDFMCALLBACK,
   UINT nKeys,
@@ -2190,9 +2190,9 @@ SHCreateDefaultExtractIcon(
  */
 
 HRESULT WINAPI SHCreateDataObject(
-  _In_opt_ LPCITEMIDLIST pidlFolder,
+  _In_opt_ PCIDLIST_ABSOLUTE pidlFolder,
   _In_ UINT cidl,
-  _In_reads_opt_(cidl) LPCITEMIDLIST* apidl,
+  _In_reads_opt_(cidl) PCUITEMID_CHILD_ARRAY apidl,
   _In_opt_ IDataObject *pdtInner,
   _In_ REFIID riid,
   _Outptr_ void **ppv);
@@ -2202,9 +2202,9 @@ HRESULT WINAPI SHCreateDataObject(
  */
 
 HRESULT WINAPI CIDLData_CreateFromIDArray(
-  _In_ LPCITEMIDLIST pidlFolder,
+  _In_ PCIDLIST_ABSOLUTE pidlFolder,
   _In_ UINT cidl,
-  _In_reads_opt_(cidl) LPCITEMIDLIST* apidl,
+  _In_reads_opt_(cidl) PCUIDLIST_RELATIVE_ARRAY apidl,
   _Outptr_ IDataObject **ppdtobj);
 
 /****************************************************************************
index fc30679..a3b9559 100644 (file)
@@ -32,16 +32,44 @@ typedef const SHITEMID *LPCSHITEMID;
 typedef struct _ITEMIDLIST
 {
     SHITEMID mkid; /* first itemid in list */
-} ITEMIDLIST,*LPITEMIDLIST;
-typedef const ITEMIDLIST *LPCITEMIDLIST;
-typedef LPITEMIDLIST PITEMID_CHILD;
-typedef LPCITEMIDLIST PCITEMID_CHILD;
-typedef LPCITEMIDLIST PCUITEMID_CHILD;
-typedef LPCITEMIDLIST *PCUITEMID_CHILD_ARRAY;
-typedef LPITEMIDLIST PIDLIST_RELATIVE;
-typedef LPCITEMIDLIST PCUIDLIST_RELATIVE;
-typedef LPITEMIDLIST PIDLIST_ABSOLUTE;
-typedef LPCITEMIDLIST PCIDLIST_ABSOLUTE;
+} ITEMIDLIST;
+
+#ifndef UNALIGNED
+#define UNALIGNED
+#endif
+
+typedef ITEMIDLIST UNALIGNED *LPITEMIDLIST;
+typedef const ITEMIDLIST UNALIGNED *LPCITEMIDLIST;
+
+cpp_quote("#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)")
+cpp_quote("typedef struct _ITEMIDLIST_RELATIVE : public ITEMIDLIST { } ITEMIDLIST_RELATIVE;")
+cpp_quote("typedef struct _ITEMIDLIST_ABSOLUTE : public ITEMIDLIST_RELATIVE { } ITEMIDLIST_ABSOLUTE;")
+cpp_quote("typedef struct _ITEMID_CHILD : public ITEMIDLIST_RELATIVE { } ITEMID_CHILD;")
+cpp_quote("#else")
+typedef ITEMIDLIST ITEMIDLIST_RELATIVE;
+typedef ITEMIDLIST ITEMIDLIST_ABSOLUTE;
+typedef ITEMIDLIST ITEMID_CHILD;
+cpp_quote("#endif")
+
+typedef ITEMIDLIST_RELATIVE *PIDLIST_RELATIVE;
+typedef ITEMIDLIST_RELATIVE UNALIGNED *PUIDLIST_RELATIVE;
+typedef const ITEMIDLIST_RELATIVE *PCIDLIST_RELATIVE;
+typedef const ITEMIDLIST_RELATIVE UNALIGNED *PCUIDLIST_RELATIVE;
+typedef const PCUIDLIST_RELATIVE *PCUIDLIST_RELATIVE_ARRAY;
+
+typedef ITEMIDLIST_ABSOLUTE *PIDLIST_ABSOLUTE;
+typedef ITEMIDLIST_ABSOLUTE UNALIGNED *PUIDLIST_ABSOLUTE;
+typedef const ITEMIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE;
+typedef const ITEMIDLIST_ABSOLUTE UNALIGNED *PCUIDLIST_ABSOLUTE;
+typedef const PCIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE_ARRAY;
+typedef const PCUIDLIST_ABSOLUTE *PCUIDLIST_ABSOLUTE_ARRAY;
+
+typedef ITEMID_CHILD *PITEMID_CHILD;
+typedef ITEMID_CHILD UNALIGNED *PUITEMID_CHILD;
+typedef const ITEMID_CHILD *PCITEMID_CHILD;
+typedef const ITEMID_CHILD UNALIGNED *PCUITEMID_CHILD;
+typedef const PCUITEMID_CHILD *PCUITEMID_CHILD_ARRAY;
+
 cpp_quote("#include <poppack.h>")
 
 #ifndef MAX_PATH