sync with Wine:
Alexandre Julliard, 2005-09-07: Replace a few more direct lpVtbl accesses by the proper macros. (patch applied only partly - the remaining COBJ macros are nonstandard, and don't exist in MSDN)
Alexandre Julliard, 2005-09-09:	Use Get/SetWindowLongPtr instead of Get/SetWindowLong where appropriate.
Modified: trunk/reactos/subsys/system/winefile/winefile.c

Modified: trunk/reactos/subsys/system/winefile/winefile.c
--- trunk/reactos/subsys/system/winefile/winefile.c	2005-10-01 08:58:49 UTC (rev 18185)
+++ trunk/reactos/subsys/system/winefile/winefile.c	2005-10-01 10:10:39 UTC (rev 18186)
@@ -28,6 +28,8 @@
 #include <dirent.h>
 #endif
 
+#define COBJMACROS
+
 #include "winefile.h"
 
 #include "resource.h"
@@ -306,10 +308,10 @@
 		DestroyIcon(entry->hicon);
 
 	if (entry->folder && entry->folder!=Globals.iDesktop)
-		(*entry->folder->lpVtbl->Release)(entry->folder);
+		IShellFolder_Release(entry->folder);
 
 	if (entry->pidl)
-		(*Globals.iMalloc->lpVtbl->Free)(Globals.iMalloc, entry->pidl);
+		IMalloc_Free(Globals.iMalloc, entry->pidl);
 #endif
 
 	free(entry);
@@ -664,7 +666,7 @@
 static void free_strret(STRRET* str)
 {
 	if (str->uType == STRRET_WSTR)
-		(*Globals.iMalloc->lpVtbl->Free)(Globals.iMalloc, str->UNION_MEMBER(pOleStr));
+		IMalloc_Free(Globals.iMalloc, str->UNION_MEMBER(pOleStr));
 }
 
 
@@ -702,7 +704,7 @@
 	STRRET str;
 
 	 /* SHGDN_FORPARSING: get full path of id list */
-	HRESULT hr = (*folder->lpVtbl->GetDisplayNameOf)(folder, pidl, SHGDN_FORPARSING, &str);
+	HRESULT hr = IShellFolder_GetDisplayNameOf(folder, pidl, SHGDN_FORPARSING, &str);
 
 	if (SUCCEEDED(hr)) {
 		get_strretA(&str, &pidl->mkid, buffer, len);
@@ -747,7 +749,7 @@
 {
 	STRRET str;
 
-	HRESULT hr = (*folder->lpVtbl->GetDisplayNameOf)(folder, pidl, flags, &str);
+	HRESULT hr = IShellFolder_GetDisplayNameOf(folder, pidl, flags, &str);
 
 	if (SUCCEEDED(hr)) {
 		get_strret(&str, &pidl->mkid, buffer, len);
@@ -764,7 +766,7 @@
 	STRRET str;
 
 	 /* SHGDN_FORPARSING: get full path of id list */
-	HRESULT hr = (*folder->lpVtbl->GetDisplayNameOf)(folder, pidl, SHGDN_FORPARSING, &str);
+	HRESULT hr = IShellFolder_GetDisplayNameOf(folder, pidl, SHGDN_FORPARSING, &str);
 
 	if (SUCCEEDED(hr)) {
 		get_strretW(&str, &pidl->mkid, buffer, len);
@@ -791,7 +793,7 @@
 	MultiByteToWideChar(CP_ACP, 0, path, -1, buffer, MAX_PATH);
 #endif
 
-	hr = (*Globals.iDesktop->lpVtbl->ParseDisplayName)(Globals.iDesktop, hwnd, NULL, buffer, &len, &pidl, NULL);
+	hr = IShellFolder_ParseDisplayName(Globals.iDesktop, hwnd, NULL, buffer, &len, &pidl, NULL);
 	if (FAILED(hr))
 		return NULL;
 
@@ -813,7 +815,7 @@
 			LPITEMIDLIST pidl;
 			ULONG len;
 
-			hr = (*Globals.iDesktop->lpVtbl->ParseDisplayName)(Globals.iDesktop, hwnd, NULL, buffer, &len, &pidl, NULL);
+			hr = IShellFolder_ParseDisplayName(Globals.iDesktop, hwnd, NULL, buffer, &len, &pidl, NULL);
 
 			if (SUCCEEDED(hr))
 				return pidl;
@@ -835,7 +837,7 @@
 {
 	IExtractIcon* pExtract;
 
-	if (SUCCEEDED((*folder->lpVtbl->GetUIObjectOf)(folder, 0, 1, (LPCITEMIDLIST*)&pidl, &IID_IExtractIcon, 0, (LPVOID*)&pExtract))) {
+	if (SUCCEEDED(IShellFolder_GetUIObjectOf(folder, 0, 1, (LPCITEMIDLIST*)&pidl, &IID_IExtractIcon, 0, (LPVOID*)&pExtract))) {
 		TCHAR path[_MAX_PATH];
 		unsigned flags;
 		HICON hicon;
@@ -903,11 +905,11 @@
 			break;
 
 		 /* copy first element of item idlist */
-		next_pidl = (*Globals.iMalloc->lpVtbl->Alloc)(Globals.iMalloc, pidl->mkid.cb+sizeof(USHORT));
+		next_pidl = IMalloc_Alloc(Globals.iMalloc, pidl->mkid.cb+sizeof(USHORT));
 		memcpy(next_pidl, pidl, pidl->mkid.cb);
 		((LPITEMIDLIST)((LPBYTE)next_pidl+pidl->mkid.cb))->mkid.cb = 0;
 
-		hr = (*folder->lpVtbl->BindToObject)(folder, next_pidl, 0, &IID_IShellFolder, (void**)&child);
+		hr = IShellFolder_BindToObject(folder, next_pidl, 0, &IID_IShellFolder, (void**)&child);
 		if (!SUCCEEDED(hr))
 			break;
 
@@ -943,12 +945,12 @@
 		STGMEDIUM medium = {0, {0}, 0};
 		FORMATETC fmt = {Globals.cfStrFName, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
 
-		HRESULT hr = (*folder->lpVtbl->GetUIObjectOf)(folder, 0, 1, &pidl, &IID_IDataObject, 0, (LPVOID*)&pDataObj);
+		HRESULT hr = IShellFolder_GetUIObjectOf(folder, 0, 1, &pidl, &IID_IDataObject, 0, (LPVOID*)&pDataObj);
 
 		if (SUCCEEDED(hr)) {
-			hr = (*pDataObj->lpVtbl->GetData)(pDataObj, &fmt, &medium);
+			hr = IDataObject_GetData(pDataObj, &fmt, &medium);
 
-			(*pDataObj->lpVtbl->Release)(pDataObj);
+			IDataObject_Release(pDataObj);
 
 			if (SUCCEEDED(hr)) {
 				LPCTSTR path = (LPCTSTR)GlobalLock(medium.UNION_MEMBER(hGlobal));
@@ -1001,7 +1003,7 @@
 	if (!folder)
 		return;
 
-	hr = (*folder->lpVtbl->EnumObjects)(folder, hwnd, SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN|SHCONTF_SHAREABLE|SHCONTF_STORAGE, &idlist);
+	hr = IShellFolder_EnumObjects(folder, hwnd, SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN|SHCONTF_SHAREABLE|SHCONTF_STORAGE, &idlist);
 
 	if (SUCCEEDED(hr)) {
 		for(;;) {
@@ -1013,7 +1015,7 @@
 
 			memset(pidls, 0, sizeof(pidls));
 
-			hr = (*idlist->lpVtbl->Next)(idlist, FETCH_ITEM_COUNT, pidls, &cnt);
+			hr = IEnumIDList_Next(idlist, FETCH_ITEM_COUNT, pidls, &cnt);
 			if (!SUCCEEDED(hr))
 				break;
 
@@ -1034,7 +1036,7 @@
 
 				attribs = ~SFGAO_FILESYSTEM;	/*SFGAO_HASSUBFOLDER|SFGAO_FOLDER; SFGAO_FILESYSTEM sorgt daf³r, da? "My Documents" anstatt von "Martin's Documents" angezeigt wird */
 
-				hr = (*folder->lpVtbl->GetAttributesOf)(folder, 1, (LPCITEMIDLIST*)&pidls[n], &attribs);
+				hr = IShellFolder_GetAttributesOf(folder, 1, (LPCITEMIDLIST*)&pidls[n], &attribs);
 
 				if (SUCCEEDED(hr)) {
 					if (attribs != (SFGAOF)~SFGAO_FILESYSTEM) {
@@ -1049,7 +1051,7 @@
 				entry->pidl = pidls[n];
 
 				if (entry->data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
-					hr = (*folder->lpVtbl->BindToObject)(folder, pidls[n], 0, &IID_IShellFolder, (void**)&child);
+					hr = IShellFolder_BindToObject(folder, pidls[n], 0, &IID_IShellFolder, (void**)&child);
 
 					if (SUCCEEDED(hr))
 						entry->folder = child;
@@ -1086,7 +1088,7 @@
 			}
 		}
 
-		(*idlist->lpVtbl->Release)(idlist);
+		IEnumIDList_Release(idlist);
 	}
 
 	if (last)
@@ -1491,7 +1493,7 @@
 		attribs = 0;
 
 		if (dir->folder)
-			hr = (*dir->folder->lpVtbl->GetAttributesOf)(dir->folder, 1, (LPCITEMIDLIST*)&dir->pidl, &attribs);
+			hr = IShellFolder_GetAttributesOf(dir->folder, 1, (LPCITEMIDLIST*)&dir->pidl, &attribs);
 
 		if (SUCCEEDED(hr) && (attribs&SFGAO_FILESYSTEM)) {
 			IShellFolder* parent = dir->up? dir->up->folder: Globals.iDesktop;
@@ -1617,7 +1619,7 @@
 		newchild = NULL;
 
 		child->hwnd = (HWND) wparam;
-		SetWindowLong(child->hwnd, GWL_USERDATA, (LPARAM)child);
+		SetWindowLongPtr(child->hwnd, GWLP_USERDATA, (LPARAM)child);
 	}
 
 	return CallNextHookEx(hcbthook, code, wparam, lparam);
@@ -1697,7 +1699,7 @@
 
 	switch(nmsg) {
 		case WM_INITDIALOG:
-			SetWindowLong(hwnd, GWL_USERDATA, lparam);
+			SetWindowLongPtr(hwnd, GWLP_USERDATA, lparam);
 			SetWindowText(GetDlgItem(hwnd, 201), (LPCTSTR)lparam);
 			return 1;
 
@@ -1706,7 +1708,7 @@
 
 			switch(id) {
 			  case IDOK: {
-				LPTSTR dest = (LPTSTR) GetWindowLong(hwnd, GWL_USERDATA);
+				LPTSTR dest = (LPTSTR) GetWindowLongPtr(hwnd, GWLP_USERDATA);
 				GetWindowText(GetDlgItem(hwnd, 201), dest, MAX_PATH);
 				EndDialog(hwnd, id);
 				break;}
@@ -2084,7 +2086,7 @@
 
 	/* search for a already open window for the same drive */
 	for(child_wnd=GetNextWindow(Globals.hmdiclient,GW_CHILD); child_wnd; child_wnd=GetNextWindow(child_wnd, GW_HWNDNEXT)) {
-		ChildWnd* child = (ChildWnd*) GetWindowLong(child_wnd, GWL_USERDATA);
+		ChildWnd* child = (ChildWnd*) GetWindowLongPtr(child_wnd, GWLP_USERDATA);
 
 		if (child) {
 			_tsplitpath(child->root.path, drv2, 0, 0, 0);
@@ -2109,7 +2111,7 @@
 
 	/* search for a already open window of the given file system name */
 	for(child_wnd=GetNextWindow(Globals.hmdiclient,GW_CHILD); child_wnd; child_wnd=GetNextWindow(child_wnd, GW_HWNDNEXT)) {
-		ChildWnd* child = (ChildWnd*) GetWindowLong(child_wnd, GWL_USERDATA);
+		ChildWnd* child = (ChildWnd*) GetWindowLongPtr(child_wnd, GWLP_USERDATA);
 
 		if (child) {
 			if (!lstrcmpi(child->root.fs, filesys)) {
@@ -2256,7 +2258,7 @@
 
 						/* change font in all open child windows */
 						for(childWnd=GetWindow(Globals.hmdiclient,GW_CHILD); childWnd; childWnd=GetNextWindow(childWnd,GW_HWNDNEXT)) {
-							ChildWnd* child = (ChildWnd*) GetWindowLong(childWnd, GWL_USERDATA);
+							ChildWnd* child = (ChildWnd*) GetWindowLongPtr(childWnd, GWLP_USERDATA);
 							SetWindowFont(child->left.hwnd, Globals.hfont, TRUE);
 							SetWindowFont(child->right.hwnd, Globals.hfont, TRUE);
 							ListBox_SetItemHeight(child->left.hwnd, 1, max(Globals.spaceSize.cy,IMAGE_HEIGHT+3));
@@ -2869,7 +2871,7 @@
 								LBS_DISABLENOSCROLL|LBS_NOINTEGRALHEIGHT|LBS_OWNERDRAWFIXED|LBS_NOTIFY,
 								0, 0, 0, 0, parent, (HMENU)id, Globals.hInstance, 0);
 
-	SetWindowLong(pane->hwnd, GWL_USERDATA, (LPARAM)pane);
+	SetWindowLongPtr(pane->hwnd, GWLP_USERDATA, (LPARAM)pane);
 	g_orgTreeWndProc = SubclassWindow(pane->hwnd, TreeWndProc);
 
 	SetWindowFont(pane->hwnd, Globals.hfont, FALSE);
@@ -3881,7 +3883,7 @@
 		}
 
 		if (shexinfo.lpIDList != entry->pidl)
-			(*Globals.iMalloc->lpVtbl->Free)(Globals.iMalloc, shexinfo.lpIDList);
+			IMalloc_Free(Globals.iMalloc, shexinfo.lpIDList);
 
 		return ret;
 	}
@@ -4081,15 +4083,15 @@
 	CtxMenu_reset();
 
 #ifndef __MINGW32__	/* IContextMenu3 missing in MinGW (as of 6.2.2005) */
-	if ((*pcm1->lpVtbl->QueryInterface)(pcm1, &IID_IContextMenu3, (void**)&pcm) == NOERROR)
+	if (IUnknown_QueryInterface(pcm1, &IID_IContextMenu3, (void**)&pcm) == NOERROR)
 		s_pctxmenu3 = (LPCONTEXTMENU3)pcm;
 	else
 #endif
-	if ((*pcm1->lpVtbl->QueryInterface)(pcm1, &IID_IContextMenu2, (void**)&pcm) == NOERROR)
+	if (IUnknown_QueryInterface(pcm1, &IID_IContextMenu2, (void**)&pcm) == NOERROR)
 		s_pctxmenu2 = (LPCONTEXTMENU2)pcm;
 
 	if (pcm) {
-		(*pcm1->lpVtbl->Release)(pcm1);
+		IUnknown_Release(pcm1);
 		return pcm;
 	} else
 		return pcm1;
@@ -4117,7 +4119,7 @@
 	IContextMenu* pcm;
 	BOOL executed = FALSE;
 
-	HRESULT hr = (*shell_folder->lpVtbl->GetUIObjectOf)(shell_folder, hwndParent, cidl, apidl, &IID_IContextMenu, NULL, (LPVOID*)&pcm);
+	HRESULT hr = IShellFolder_GetUIObjectOf(shell_folder, hwndParent, cidl, apidl, &IID_IContextMenu, NULL, (LPVOID*)&pcm);
 /*	HRESULT hr = CDefFolderMenu_Create2(dir?dir->_pidl:DesktopFolder(), hwndParent, 1, &pidl, shell_folder, NULL, 0, NULL, &pcm); */
 
 	if (SUCCEEDED(hr)) {
@@ -4153,7 +4155,7 @@
 				CtxMenu_reset();
 		}
 
-		(*pcm->lpVtbl->Release)(pcm);
+		IUnknown_Release(pcm);
 	}
 
 	return FAILED(hr)? hr: executed? S_OK: S_FALSE;
@@ -4162,7 +4164,7 @@
 
 static LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
 {
-	ChildWnd* child = (ChildWnd*) GetWindowLong(hwnd, GWL_USERDATA);
+	ChildWnd* child = (ChildWnd*) GetWindowLongPtr(hwnd, GWLP_USERDATA);
 	ASSERT(child);
 
 	switch(nmsg) {
@@ -4185,7 +4187,7 @@
 
 		case WM_NCDESTROY:
 			free_child_window(child);
-			SetWindowLong(hwnd, GWL_USERDATA, 0);
+			SetWindowLongPtr(hwnd, GWLP_USERDATA, 0);
 			break;
 
 		case WM_PAINT: {
@@ -4494,10 +4496,10 @@
 						if (ShellFolderContextMenu(parentFolder, hwnd, 1, &pidlLast, pt.x, pt.y) == S_OK)
 							refresh_child(child);
 
-						(*parentFolder->lpVtbl->Release)(parentFolder);
+						IShellFolder_Release(parentFolder);
 					}
 
-					(*Globals.iMalloc->lpVtbl->Free)(Globals.iMalloc, pidl_abs);
+					IMalloc_Free(Globals.iMalloc, pidl_abs);
 				}
 			}
 			break;}
@@ -4546,8 +4548,8 @@
 
 static LRESULT CALLBACK TreeWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
 {
-	ChildWnd* child = (ChildWnd*) GetWindowLong(GetParent(hwnd), GWL_USERDATA);
-	Pane* pane = (Pane*) GetWindowLong(hwnd, GWL_USERDATA);
+	ChildWnd* child = (ChildWnd*) GetWindowLongPtr(GetParent(hwnd), GWLP_USERDATA);
+	Pane* pane = (Pane*) GetWindowLongPtr(hwnd, GWLP_USERDATA);
 	ASSERT(child);
 
 	switch(nmsg) {
@@ -4773,8 +4775,8 @@
 static void ExitInstance(void)
 {
 #ifdef _SHELL_FOLDERS
-	(*Globals.iDesktop->lpVtbl->Release)(Globals.iDesktop);
-	(*Globals.iMalloc->lpVtbl->Release)(Globals.iMalloc);
+	IShellFolder_Release(Globals.iDesktop);
+	IMalloc_Release(Globals.iMalloc);
 	CoUninitialize();
 #endif