diff --git a/configure b/configure index 340d7a86be8aa198ab3a9fff046547683caf40a2..f5573db460f15c23ea0b625d5c5f638e7aec22e1 100755 --- a/configure +++ b/configure @@ -20092,7 +20092,7 @@ MAKE_LIB_RULES=libs/Makelib.rules MAKE_PROG_RULES=programs/Makeprog.rules - ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules libs/Makelib.rules programs/Makeprog.rules Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/amstream/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/capi2032/Makefile dlls/cards/Makefile dlls/cfgmgr32/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/comctl32/tests/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/ctl3d/Makefile dlls/d3d8/Makefile dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3drm/Makefile dlls/d3dx8/Makefile dlls/dbghelp/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/ddraw/tests/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile dlls/dmband/Makefile dlls/dmcompos/Makefile dlls/dmime/Makefile dlls/dmloader/Makefile dlls/dmscript/Makefile dlls/dmstyle/Makefile dlls/dmsynth/Makefile dlls/dmusic/Makefile dlls/dmusic32/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dpnet/Makefile dlls/dpnhpast/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile dlls/dswave/Makefile dlls/dxdiagn/Makefile dlls/dxerr8/Makefile dlls/dxerr9/Makefile dlls/dxguid/Makefile dlls/gdi/Makefile dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/glut32/Makefile dlls/hhctrl.ocx/Makefile dlls/iccvid/Makefile dlls/icmp/Makefile dlls/ifsmgr.vxd/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/iphlpapi/Makefile dlls/iphlpapi/tests/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mapi32/tests/Makefile dlls/mmdevldr.vxd/Makefile dlls/monodebg.vxd/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msacm/tests/Makefile dlls/msdmo/Makefile dlls/mshtml/Makefile dlls/msi/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msrle32/Makefile dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile dlls/msvcrt40/Makefile dlls/msvcrtd/Makefile dlls/msvcrtd/tests/Makefile dlls/msvidc32/Makefile dlls/msvideo/Makefile dlls/mswsock/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/newdev/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleacc/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/rpcrt4/tests/Makefile dlls/rsabase/Makefile dlls/secur32/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/unicows/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/uuid/Makefile dlls/uxtheme/Makefile dlls/vdhcp.vxd/Makefile dlls/vdmdbg/Makefile dlls/version/Makefile dlls/version/tests/Makefile dlls/vmm.vxd/Makefile dlls/vnbt.vxd/Makefile dlls/vnetbios.vxd/Makefile dlls/vtdapi.vxd/Makefile dlls/vwin32.vxd/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/wined3d/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winejack/Makefile dlls/winmm/winenas/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile dlls/winspool/tests/Makefile dlls/wintab32/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile libs/Makefile libs/port/Makefile libs/unicode/Makefile libs/wine/Makefile libs/wpp/Makefile loader/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/progman/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile programs/taskmgr/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineboot/Makefile programs/winebrowser/Makefile programs/winecfg/Makefile programs/wineconsole/Makefile programs/winedbg/Makefile programs/winefile/Makefile programs/winemenubuilder/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winetest/Makefile programs/winevdm/Makefile programs/winhelp/Makefile programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/winegcc/Makefile tools/wmc/Makefile tools/wrc/Makefile" + ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules libs/Makelib.rules programs/Makeprog.rules Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/amstream/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/capi2032/Makefile dlls/cards/Makefile dlls/cfgmgr32/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/comctl32/tests/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/ctl3d/Makefile dlls/d3d8/Makefile dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3drm/Makefile dlls/d3dx8/Makefile dlls/d3dxof/Makefile dlls/dbghelp/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/ddraw/tests/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile dlls/dmband/Makefile dlls/dmcompos/Makefile dlls/dmime/Makefile dlls/dmloader/Makefile dlls/dmscript/Makefile dlls/dmstyle/Makefile dlls/dmsynth/Makefile dlls/dmusic/Makefile dlls/dmusic32/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dpnet/Makefile dlls/dpnhpast/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile dlls/dswave/Makefile dlls/dxdiagn/Makefile dlls/dxerr8/Makefile dlls/dxerr9/Makefile dlls/dxguid/Makefile dlls/gdi/Makefile dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/glut32/Makefile dlls/hhctrl.ocx/Makefile dlls/iccvid/Makefile dlls/icmp/Makefile dlls/ifsmgr.vxd/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/iphlpapi/Makefile dlls/iphlpapi/tests/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mapi32/tests/Makefile dlls/mmdevldr.vxd/Makefile dlls/monodebg.vxd/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msacm/tests/Makefile dlls/msdmo/Makefile dlls/mshtml/Makefile dlls/msi/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msrle32/Makefile dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile dlls/msvcrt40/Makefile dlls/msvcrtd/Makefile dlls/msvcrtd/tests/Makefile dlls/msvidc32/Makefile dlls/msvideo/Makefile dlls/mswsock/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/newdev/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleacc/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/rpcrt4/tests/Makefile dlls/rsabase/Makefile dlls/secur32/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/unicows/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/uuid/Makefile dlls/uxtheme/Makefile dlls/vdhcp.vxd/Makefile dlls/vdmdbg/Makefile dlls/version/Makefile dlls/version/tests/Makefile dlls/vmm.vxd/Makefile dlls/vnbt.vxd/Makefile dlls/vnetbios.vxd/Makefile dlls/vtdapi.vxd/Makefile dlls/vwin32.vxd/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/wined3d/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winejack/Makefile dlls/winmm/winenas/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile dlls/winspool/tests/Makefile dlls/wintab32/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile libs/Makefile libs/port/Makefile libs/unicode/Makefile libs/wine/Makefile libs/wpp/Makefile loader/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/progman/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile programs/taskmgr/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineboot/Makefile programs/winebrowser/Makefile programs/winecfg/Makefile programs/wineconsole/Makefile programs/winedbg/Makefile programs/winefile/Makefile programs/winemenubuilder/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winetest/Makefile programs/winevdm/Makefile programs/winhelp/Makefile programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/winegcc/Makefile tools/wmc/Makefile tools/wrc/Makefile" cat >confcache <<\_ACEOF @@ -20651,6 +20651,7 @@ do "dlls/d3dim/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/d3dim/Makefile" ;; "dlls/d3drm/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/d3drm/Makefile" ;; "dlls/d3dx8/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/d3dx8/Makefile" ;; + "dlls/d3dxof/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/d3dxof/Makefile" ;; "dlls/dbghelp/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dbghelp/Makefile" ;; "dlls/dciman32/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dciman32/Makefile" ;; "dlls/ddraw/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/ddraw/Makefile" ;; diff --git a/configure.ac b/configure.ac index a8e20bdc263fdeb1d4a4ca58ffa64f409017e11e..7c8bf6399fe2764b826e993bab6bfc7b03b08618 100644 --- a/configure.ac +++ b/configure.ac @@ -1512,6 +1512,7 @@ dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3drm/Makefile dlls/d3dx8/Makefile +dlls/d3dxof/Makefile dlls/dbghelp/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile diff --git a/dlls/Makefile.in b/dlls/Makefile.in index 18d6f58ce43b3279f1880498a6a60bcd87a7e3cf..ae9ec53b8afba6a963b7efbc3c74c3a2513d0d4e 100644 --- a/dlls/Makefile.in +++ b/dlls/Makefile.in @@ -32,6 +32,7 @@ BASEDIRS = \ ctl3d \ d3dim \ d3drm \ + d3dxof \ dbghelp \ dciman32 \ devenum \ @@ -250,6 +251,7 @@ SYMLINKS_SO = \ ctl3d32.dll.so \ d3dim.dll.so \ d3drm.dll.so \ + d3dxof.dll.so \ dbghelp.dll.so \ dciman32.dll.so \ devenum.dll.so \ @@ -458,6 +460,9 @@ d3drm.dll.so: d3drm/d3drm.dll.so d3dx8.dll.so: d3dx8/d3dx8.dll.so $(RM) $@ && $(LN_S) d3dx8/d3dx8.dll.so $@ +d3dxof.dll.so: d3dxof/d3dxof.dll.so + $(RM) $@ && $(LN_S) d3dxof/d3dxof.dll.so $@ + dbghelp.dll.so: dbghelp/dbghelp.dll.so $(RM) $@ && $(LN_S) dbghelp/dbghelp.dll.so $@ @@ -957,6 +962,7 @@ IMPORT_LIBS = \ libd3dim \ libd3drm \ libd3dx8 \ + libd3dxof \ libdbghelp \ libdciman32 \ libddraw \ @@ -1163,6 +1169,11 @@ libd3dx8.def: d3dx8/d3dx8.spec.def libd3dx8.a: d3dx8/d3dx8.spec.def $(DLLTOOL) -k -l $@ -d d3dx8/d3dx8.spec.def +libd3dxof.def: d3dxof/d3dxof.spec.def + $(RM) $@ && $(LN_S) d3dxof/d3dxof.spec.def $@ +libd3dxof.a: d3dxof/d3dxof.spec.def + $(DLLTOOL) -k -l $@ -d d3dxof/d3dxof.spec.def + libdbghelp.def: dbghelp/dbghelp.spec.def $(RM) $@ && $(LN_S) dbghelp/dbghelp.spec.def $@ libdbghelp.a: dbghelp/dbghelp.spec.def @@ -1687,6 +1698,7 @@ d3d9/d3d9.spec.def: $(WINEBUILD) d3dim/d3dim.spec.def: $(WINEBUILD) d3drm/d3drm.spec.def: $(WINEBUILD) d3dx8/d3dx8.spec.def: $(WINEBUILD) +d3dxof/d3dxof.spec.def: $(WINEBUILD) dbghelp/dbghelp.spec.def: $(WINEBUILD) dciman32/dciman32.spec.def: $(WINEBUILD) ddraw/ddraw.spec.def: $(WINEBUILD) @@ -1813,6 +1825,7 @@ d3d9/d3d9.dll.so: d3d9 d3dim/d3dim.dll.so: d3dim d3drm/d3drm.dll.so: d3drm d3dx8/d3dx8.dll.so: d3dx8 +d3dxof/d3dxof.dll.so: d3dxof dbghelp/dbghelp.dll.so: dbghelp dciman32/dciman32.dll.so: dciman32 ddraw/ddraw.dll.so: ddraw diff --git a/dlls/d3dxof/.cvsignore b/dlls/d3dxof/.cvsignore new file mode 100644 index 0000000000000000000000000000000000000000..fce10dba646ac29ee25571b2714bffd182bf4412 --- /dev/null +++ b/dlls/d3dxof/.cvsignore @@ -0,0 +1,4 @@ +Makefile +d3dxof.dll.dbg.c +d3dxof.spec.def +version.res diff --git a/dlls/d3dxof/Makefile.in b/dlls/d3dxof/Makefile.in new file mode 100644 index 0000000000000000000000000000000000000000..ba7703f9b2cd9f77addc5a00af08a308cbe32c48 --- /dev/null +++ b/dlls/d3dxof/Makefile.in @@ -0,0 +1,18 @@ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +MODULE = d3dxof.dll +IMPORTS = ole32 user32 advapi32 kernel32 +EXTRALIBS = -ldxguid -luuid + +C_SRCS = \ + main.c \ + d3dxof.c \ + regsvr.c + +RC_SRCS = version.rc + +@MAKE_DLL_RULES@ + +### Dependencies: diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c new file mode 100644 index 0000000000000000000000000000000000000000..02a6fb38c623d631a314379022907f59cd512be0 --- /dev/null +++ b/dlls/d3dxof/d3dxof.c @@ -0,0 +1,699 @@ +/* + * Implementation of DirectX File Interfaces + * + * Copyright 2004 Christian Costa + * + * This file contains the (internal) driver registration functions, + * driver enumeration APIs and DirectDraw creation functions. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" +#include "wine/debug.h" + +#include "winbase.h" +#include "wingdi.h" + +#include "d3dxof_private.h" +#include "dxfile.h" + +WINE_DEFAULT_DEBUG_CHANNEL(d3dxof); + +static struct ICOM_VTABLE(IDirectXFile) IDirectXFile_Vtbl; +static struct ICOM_VTABLE(IDirectXFileEnumObject) IDirectXFileEnumObject_Vtbl; +static struct ICOM_VTABLE(IDirectXFileData) IDirectXFileData_Vtbl; + +HRESULT XF_create(IUnknown *pUnkOuter, LPVOID *ppObj) +{ + IDirectXFileImpl* object; + + FIXME("(%p,%p)\n", pUnkOuter, ppObj); + + object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileImpl)); + + object->lpVtbl.lpVtbl = &IDirectXFile_Vtbl; + object->ref = 1; + + *ppObj = object; + + return S_OK; +} + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirectXFileImpl_QueryInterface(IDirectXFile* iface, REFIID riid, void** ppvObject) +{ + ICOM_THIS(IDirectXFileImpl, iface); + + FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); + + if (IsEqualGUID(riid, &IID_IUnknown) + || IsEqualGUID(riid, &IID_IDirectXFile)) + { + IClassFactory_AddRef(iface); + *ppvObject = This; + return S_OK; + } + + ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); + return E_NOINTERFACE; +} + +static ULONG WINAPI IDirectXFileImpl_AddRef(IDirectXFile* iface) +{ + ICOM_THIS(IDirectXFileImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + This->ref++; + return S_OK; +} + +static ULONG WINAPI IDirectXFileImpl_Release(IDirectXFile* iface) +{ + ICOM_THIS(IDirectXFileImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + if (!--This->ref) + HeapFree(GetProcessHeap(), 0, This); + + return S_OK; +} + +/*** IDirectXFile methods ***/ +static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPVOID pvSource, DXFILELOADOPTIONS dwLoadOptions, LPDIRECTXFILEENUMOBJECT* ppEnumObj) + +{ + ICOM_THIS(IDirectXFileImpl, iface); + IDirectXFileEnumObjectImpl* object; + + FIXME("(%p/%p)->(%p,%lx,%p) stub!\n", This, iface, pvSource, dwLoadOptions, ppEnumObj); + + if (dwLoadOptions == 0) + { + FIXME("Source is a file '%s'\n", (char*)pvSource); + } + + object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileEnumObjectImpl)); + + object->lpVtbl.lpVtbl = &IDirectXFileEnumObject_Vtbl; + object->ref = 1; + + *ppEnumObj = (LPDIRECTXFILEENUMOBJECT)object; + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileImpl_CreateSaveObject(IDirectXFile* iface, LPCSTR szFileName, DXFILEFORMAT dwFileFormat, LPDIRECTXFILESAVEOBJECT* ppSaveObj) +{ + ICOM_THIS(IDirectXFileImpl, iface); + + FIXME("(%p/%p)->(%s,%lx,%p) stub!\n", This, iface, szFileName, dwFileFormat, ppSaveObj); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileImpl_RegisterTemplates(IDirectXFile* iface, LPVOID pvData, DWORD cbSize) +{ + ICOM_THIS(IDirectXFileImpl, iface); + + FIXME("(%p/%p)->(%p,%ld) stub!\n", This, iface, pvData, cbSize); + + return S_FALSE; +} + +static ICOM_VTABLE(IDirectXFile) IDirectXFile_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectXFileImpl_QueryInterface, + IDirectXFileImpl_AddRef, + IDirectXFileImpl_Release, + IDirectXFileImpl_CreateEnumObject, + IDirectXFileImpl_CreateSaveObject, + IDirectXFileImpl_RegisterTemplates +}; + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirectXFileBinaryImpl_QueryInterface(IDirectXFileBinary* iface, REFIID riid, void** ppvObject) +{ + ICOM_THIS(IDirectXFileBinaryImpl, iface); + + FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); + + if (IsEqualGUID(riid, &IID_IUnknown) + || IsEqualGUID(riid, &IID_IDirectXFileBinary)) + { + IClassFactory_AddRef(iface); + *ppvObject = This; + return S_OK; + } + + ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); + return E_NOINTERFACE; +} + +static ULONG WINAPI IDirectXFileBinaryImpl_AddRef(IDirectXFileBinary* iface) +{ + ICOM_THIS(IDirectXFileBinaryImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + This->ref++; + return S_OK; +} + +static ULONG WINAPI IDirectXFileBinaryImpl_Release(IDirectXFileBinary* iface) +{ + ICOM_THIS(IDirectXFileBinaryImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + if (!--This->ref) + HeapFree(GetProcessHeap(), 0, This); + + return S_OK; +} + +/*** IDirectXFileObject methods ***/ +static HRESULT WINAPI IDirectXFileBinaryImpl_GetName(IDirectXFileBinary* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen) + +{ + ICOM_THIS(IDirectXFileBinaryImpl, iface); + + FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileBinaryImpl_GetId(IDirectXFileBinary* iface, LPGUID pGuid) +{ + ICOM_THIS(IDirectXFileBinaryImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid); + + return S_FALSE; +} + +/*** IDirectXFileBinary methods ***/ +static HRESULT WINAPI IDirectXFileBinaryImpl_GetSize(IDirectXFileBinary* iface, DWORD* pcbSize) +{ + ICOM_THIS(IDirectXFileBinaryImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, pcbSize); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileBinaryImpl_GetMimeType(IDirectXFileBinary* iface, LPCSTR* pszMimeType) +{ + ICOM_THIS(IDirectXFileBinaryImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, pszMimeType); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileBinaryImpl_Read(IDirectXFileBinary* iface, LPVOID pvData, DWORD cbSize, LPDWORD pcbRead) +{ + ICOM_THIS(IDirectXFileBinaryImpl, iface); + + FIXME("(%p/%p)->(%p, %ld, %p) stub!\n", This, iface, pvData, cbSize, pcbRead); + + return S_FALSE; +} + +static ICOM_VTABLE(IDirectXFileBinary) IDirectXFileBinary_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectXFileBinaryImpl_QueryInterface, + IDirectXFileBinaryImpl_AddRef, + IDirectXFileBinaryImpl_Release, + IDirectXFileBinaryImpl_GetName, + IDirectXFileBinaryImpl_GetId, + IDirectXFileBinaryImpl_GetSize, + IDirectXFileBinaryImpl_GetMimeType, + IDirectXFileBinaryImpl_Read +}; + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirectXFileDataImpl_QueryInterface(IDirectXFileData* iface, REFIID riid, void** ppvObject) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); + + if (IsEqualGUID(riid, &IID_IUnknown) + || IsEqualGUID(riid, &IID_IDirectXFileData)) + { + IClassFactory_AddRef(iface); + *ppvObject = This; + return S_OK; + } + + ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); + return E_NOINTERFACE; +} + +static ULONG WINAPI IDirectXFileDataImpl_AddRef(IDirectXFileData* iface) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + This->ref++; + return S_OK; +} + +static ULONG WINAPI IDirectXFileDataImpl_Release(IDirectXFileData* iface) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + if (!--This->ref) + HeapFree(GetProcessHeap(), 0, This); + + return S_OK; +} + +/*** IDirectXFileObject methods ***/ +static HRESULT WINAPI IDirectXFileDataImpl_GetName(IDirectXFileData* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen) + +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileDataImpl_GetId(IDirectXFileData* iface, LPGUID pGuid) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid); + + return S_FALSE; +} + +/*** IDirectXFileData methods ***/ +static HRESULT WINAPI IDirectXFileDataImpl_GetData(IDirectXFileData* iface, LPCSTR szMember, DWORD* pcbSize, void** ppvData) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%s,%p,%p) stub!\n", This, iface, szMember, pcbSize, ppvData); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileDataImpl_GetType(IDirectXFileData* iface, const GUID** pguid) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, pguid); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileDataImpl_GetNextObject(IDirectXFileData* iface, LPDIRECTXFILEOBJECT* ppChildObj) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppChildObj); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileDataImpl_AddDataObject(IDirectXFileData* iface, LPDIRECTXFILEDATA pDataObj) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, pDataObj); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileDataImpl_AddDataReference(IDirectXFileData* iface, LPCSTR szRef, const GUID* pguidRef) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%s,%p) stub!\n", This, iface, szRef, pguidRef); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileDataImpl_AddBinaryObject(IDirectXFileData* iface, LPCSTR szName, const GUID* pguid, LPCSTR szMimeType, LPVOID pvData, DWORD cbSize) +{ + ICOM_THIS(IDirectXFileDataImpl, iface); + + FIXME("(%p/%p)->(%s,%p,%s,%p,%ld) stub!\n", This, iface, szName, pguid, szMimeType, pvData, cbSize); + + return S_FALSE; +} + +static ICOM_VTABLE(IDirectXFileData) IDirectXFileData_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectXFileDataImpl_QueryInterface, + IDirectXFileDataImpl_AddRef, + IDirectXFileDataImpl_Release, + IDirectXFileDataImpl_GetName, + IDirectXFileDataImpl_GetId, + IDirectXFileDataImpl_GetData, + IDirectXFileDataImpl_GetType, + IDirectXFileDataImpl_GetNextObject, + IDirectXFileDataImpl_AddDataObject, + IDirectXFileDataImpl_AddDataReference, + IDirectXFileDataImpl_AddBinaryObject +}; + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirectXFileDataReferenceImpl_QueryInterface(IDirectXFileDataReference* iface, REFIID riid, void** ppvObject) +{ + ICOM_THIS(IDirectXFileDataReferenceImpl, iface); + + FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); + + if (IsEqualGUID(riid, &IID_IUnknown) + || IsEqualGUID(riid, &IID_IDirectXFileDataReference)) + { + IClassFactory_AddRef(iface); + *ppvObject = This; + return S_OK; + } + + ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); + return E_NOINTERFACE; +} + +static ULONG WINAPI IDirectXFileDataReferenceImpl_AddRef(IDirectXFileDataReference* iface) +{ + ICOM_THIS(IDirectXFileDataReferenceImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + This->ref++; + return S_OK; +} + +static ULONG WINAPI IDirectXFileDataReferenceImpl_Release(IDirectXFileDataReference* iface) +{ + ICOM_THIS(IDirectXFileDataReferenceImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + if (!--This->ref) + HeapFree(GetProcessHeap(), 0, This); + + return S_OK; +} + +/*** IDirectXFileObject methods ***/ +static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName(IDirectXFileDataReference* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen) +{ + ICOM_THIS(IDirectXFileDataReferenceImpl, iface); + + FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetId(IDirectXFileDataReference* iface, LPGUID pGuid) +{ + ICOM_THIS(IDirectXFileDataReferenceImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid); + + return S_FALSE; +} + +/*** IDirectXFileDataReference ***/ +static HRESULT WINAPI IDirectXFileDataReferenceImpl_Resolve(IDirectXFileDataReference* iface, LPDIRECTXFILEDATA* ppDataObj) +{ + ICOM_THIS(IDirectXFileDataReferenceImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj); + + return S_FALSE; +} + +static ICOM_VTABLE(IDirectXFileDataReference) IDirectXFileDataReference_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectXFileDataReferenceImpl_QueryInterface, + IDirectXFileDataReferenceImpl_AddRef, + IDirectXFileDataReferenceImpl_Release, + IDirectXFileDataReferenceImpl_GetName, + IDirectXFileDataReferenceImpl_GetId, + IDirectXFileDataReferenceImpl_Resolve +}; + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirectXFileEnumObjectImpl_QueryInterface(IDirectXFileEnumObject* iface, REFIID riid, void** ppvObject) +{ + ICOM_THIS(IDirectXFileEnumObjectImpl, iface); + + FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); + + if (IsEqualGUID(riid, &IID_IUnknown) + || IsEqualGUID(riid, &IID_IDirectXFileEnumObject)) + { + IClassFactory_AddRef(iface); + *ppvObject = This; + return S_OK; + } + + ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); + return E_NOINTERFACE; +} + +static ULONG WINAPI IDirectXFileEnumObjectImpl_AddRef(IDirectXFileEnumObject* iface) +{ + ICOM_THIS(IDirectXFileEnumObjectImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + This->ref++; + return S_OK; +} + +static ULONG WINAPI IDirectXFileEnumObjectImpl_Release(IDirectXFileEnumObject* iface) +{ + ICOM_THIS(IDirectXFileEnumObjectImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + if (!--This->ref) + HeapFree(GetProcessHeap(), 0, This); + + return S_OK; +} + +/*** IDirectXFileEnumObject methods ***/ +static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileEnumObject* iface, LPDIRECTXFILEDATA* ppDataObj) +{ + ICOM_THIS(IDirectXFileEnumObjectImpl, iface); + IDirectXFileDataImpl* object; + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj); + + object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileDataImpl)); + + object->lpVtbl.lpVtbl = &IDirectXFileData_Vtbl; + object->ref = 1; + + *ppDataObj = (LPDIRECTXFILEDATA)object; + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectById(IDirectXFileEnumObject* iface, REFGUID rguid, LPDIRECTXFILEDATA* ppDataObj) +{ + ICOM_THIS(IDirectXFileEnumObjectImpl, iface); + + FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, rguid, ppDataObj); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectByName(IDirectXFileEnumObject* iface, LPCSTR szName, LPDIRECTXFILEDATA* ppDataObj) +{ + ICOM_THIS(IDirectXFileEnumObjectImpl, iface); + + FIXME("(%p/%p)->(%s,%p) stub!\n", This, iface, szName, ppDataObj); + + return S_FALSE; +} + +static ICOM_VTABLE(IDirectXFileEnumObject) IDirectXFileEnumObject_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectXFileEnumObjectImpl_QueryInterface, + IDirectXFileEnumObjectImpl_AddRef, + IDirectXFileEnumObjectImpl_Release, + IDirectXFileEnumObjectImpl_GetNextDataObject, + IDirectXFileEnumObjectImpl_GetDataObjectById, + IDirectXFileEnumObjectImpl_GetDataObjectByName +}; + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirectXFileObjectImpl_QueryInterface(IDirectXFileObject* iface, REFIID riid, void** ppvObject) +{ + ICOM_THIS(IDirectXFileObjectImpl, iface); + + FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); + + if (IsEqualGUID(riid, &IID_IUnknown) + || IsEqualGUID(riid, &IID_IDirectXFileObject)) + { + IClassFactory_AddRef(iface); + *ppvObject = This; + return S_OK; + } + + ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); + return E_NOINTERFACE; +} + +static ULONG WINAPI IDirectXFileObjectImpl_AddRef(IDirectXFileObject* iface) +{ + ICOM_THIS(IDirectXFileObjectImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + This->ref++; + return S_OK; +} + +static ULONG WINAPI IDirectXFileObjectImpl_Release(IDirectXFileObject* iface) +{ + ICOM_THIS(IDirectXFileObjectImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + if (!--This->ref) + HeapFree(GetProcessHeap(), 0, This); + + return S_OK; +} + +/*** IDirectXFileObject methods ***/ +static HRESULT WINAPI IDirectXFileObjectImpl_GetName(IDirectXFileObject* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen) +{ + ICOM_THIS(IDirectXFileDataReferenceImpl, iface); + + FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileObjectImpl_GetId(IDirectXFileObject* iface, LPGUID pGuid) +{ + ICOM_THIS(IDirectXFileObjectImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid); + + return S_FALSE; +} + +static ICOM_VTABLE(IDirectXFileObject) IDirectXFileObject_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectXFileObjectImpl_QueryInterface, + IDirectXFileObjectImpl_AddRef, + IDirectXFileObjectImpl_Release, + IDirectXFileObjectImpl_GetName, + IDirectXFileObjectImpl_GetId +}; + +/*** IUnknown methods ***/ +static HRESULT WINAPI IDirectXFileSaveObjectImpl_QueryInterface(IDirectXFileSaveObject* iface, REFIID riid, void** ppvObject) +{ + ICOM_THIS(IDirectXFileSaveObjectImpl, iface); + + FIXME("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); + + if (IsEqualGUID(riid, &IID_IUnknown) + || IsEqualGUID(riid, &IID_IDirectXFileSaveObject)) + { + IClassFactory_AddRef(iface); + *ppvObject = This; + return S_OK; + } + + ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); + return E_NOINTERFACE; +} + +static ULONG WINAPI IDirectXFileSaveObjectImpl_AddRef(IDirectXFileSaveObject* iface) +{ + ICOM_THIS(IDirectXFileSaveObjectImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + This->ref++; + return S_OK; +} + +static ULONG WINAPI IDirectXFileSaveObjectImpl_Release(IDirectXFileSaveObject* iface) +{ + ICOM_THIS(IDirectXFileSaveObjectImpl, iface); + + FIXME("(%p/%p)\n", iface, This); + + if (!--This->ref) + HeapFree(GetProcessHeap(), 0, This); + + return S_OK; +} + +static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveTemplates(IDirectXFileSaveObject* iface, DWORD cTemplates, const GUID** ppguidTemplates) +{ + ICOM_THIS(IDirectXFileSaveObjectImpl, iface); + + FIXME("(%p/%p)->(%ld,%p) stub!\n", This, iface, cTemplates, ppguidTemplates); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileSaveObjectImpl_CreateDataObject(IDirectXFileSaveObject* iface, REFGUID rguidTemplate, LPCSTR szName, const GUID* pguid, DWORD cbSize, LPVOID pvData, LPDIRECTXFILEDATA* ppDataObj) +{ + ICOM_THIS(IDirectXFileSaveObjectImpl, iface); + + FIXME("(%p/%p)->(%p,%s,%p,%ld,%p,%p) stub!\n", This, iface, rguidTemplate, szName, pguid, cbSize, pvData, ppDataObj); + + return S_FALSE; +} + +static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveData(IDirectXFileSaveObject* iface, LPDIRECTXFILEDATA ppDataObj) +{ + ICOM_THIS(IDirectXFileSaveObjectImpl, iface); + + FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj); + + return S_FALSE; +} + +static ICOM_VTABLE(IDirectXFileSaveObject) IDirectXFileSaveObject_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectXFileSaveObjectImpl_QueryInterface, + IDirectXFileSaveObjectImpl_AddRef, + IDirectXFileSaveObjectImpl_Release, + IDirectXFileSaveObjectImpl_SaveTemplates, + IDirectXFileSaveObjectImpl_CreateDataObject, + IDirectXFileSaveObjectImpl_SaveData +}; diff --git a/dlls/d3dxof/d3dxof.spec b/dlls/d3dxof/d3dxof.spec new file mode 100644 index 0000000000000000000000000000000000000000..8ce85463cb7c76a5f0405dd20e2bab28d72730c4 --- /dev/null +++ b/dlls/d3dxof/d3dxof.spec @@ -0,0 +1,3 @@ +@ stdcall DirectXFileCreate(ptr) +@ stdcall -private DllCanUnloadNow() D3DXOF_DllCanUnloadNow +@ stdcall -private DllGetClassObject(ptr ptr ptr) D3DXOF_DllGetClassObject diff --git a/dlls/d3dxof/d3dxof_private.h b/dlls/d3dxof/d3dxof_private.h new file mode 100644 index 0000000000000000000000000000000000000000..d4239eb254be9d381710e8fcc2c1d099ae0cd06b --- /dev/null +++ b/dlls/d3dxof/d3dxof_private.h @@ -0,0 +1,73 @@ +/* + * DirectX File private interfaces (D3DXOF.DLL) + * + * Copyright 2004 Christian Costa + * + * This file contains the (internal) driver registration functions, + * driver enumeration APIs and DirectDraw creation functions. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __D3DXOF_PRIVATE_INCLUDED__ +#define __D3DXOF_PRIVATE_INCLUDED__ + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "wtypes.h" +#include "wingdi.h" +#include "winuser.h" +#include "dxfile.h" + +HRESULT XF_create(IUnknown *pUnkOuter, LPVOID *ppObj); + +typedef struct { + IDirectXFile lpVtbl; + int ref; +} IDirectXFileImpl; + +typedef struct { + IDirectXFileBinary lpVtbl; + int ref; +} IDirectXFileBinaryImpl; + +typedef struct { + IDirectXFileData lpVtbl; + int ref; +} IDirectXFileDataImpl; + +typedef struct { + IDirectXFileDataReference lpVtbl; + int ref; +} IDirectXFileDataReferenceImpl; + +typedef struct { + IDirectXFileObject lpVtbl; + int ref; +} IDirectXFileObjectImpl; + +typedef struct { + IDirectXFileEnumObject lpVtbl; + int ref; +} IDirectXFileEnumObjectImpl; + +typedef struct { + IDirectXFileSaveObject lpVtbl; + int ref; +} IDirectXFileSaveObjectImpl; + +#endif /* __D3DXOF_PRIVATE_INCLUDED__ */ diff --git a/dlls/d3dxof/main.c b/dlls/d3dxof/main.c new file mode 100644 index 0000000000000000000000000000000000000000..070931b0ee5ff2114d0bff28555bc57e9dd885f0 --- /dev/null +++ b/dlls/d3dxof/main.c @@ -0,0 +1,230 @@ +/* + * DirectX Files Functions (D3DXOF.DLL) + * + * Copyright 2004 Christian Costa + * + * This file contains the (internal) driver registration functions, + * driver enumeration APIs and DirectDraw creation functions. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define COM_NO_WINDOWS_H + +#include <stdarg.h> +#include <string.h> + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winreg.h" +#include "winerror.h" + +#include "ole2.h" +#include "uuids.h" + +#include "d3dxof_private.h" +#include "dxfile.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(d3dxof); + +static DWORD dll_ref = 0; + +/* For the moment, do nothing here. */ +BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) +{ + switch(fdwReason) { + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hInstDLL); + break; + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +/****************************************************************************** + * DirectX File ClassFactory + */ +typedef struct { + IClassFactory ITF_IClassFactory; + + DWORD ref; + HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj); +} IClassFactoryImpl; + +struct object_creation_info +{ + const CLSID *clsid; + HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj); +}; + +static const struct object_creation_info object_creation[] = +{ + { &CLSID_CDirectXFile, XF_create }, +}; + +static HRESULT WINAPI XFCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IClassFactoryImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) + || IsEqualGUID(riid, &IID_IClassFactory)) + { + IClassFactory_AddRef(iface); + *ppobj = This; + return S_OK; + } + + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +static ULONG WINAPI XFCF_AddRef(LPCLASSFACTORY iface) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +static ULONG WINAPI XFCF_Release(LPCLASSFACTORY iface) +{ + ICOM_THIS(IClassFactoryImpl,iface); + + ULONG ref = --This->ref; + + if (ref == 0) + HeapFree(GetProcessHeap(), 0, This); + + return ref; +} + +static HRESULT WINAPI XFCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IClassFactoryImpl,iface); + HRESULT hres; + LPUNKNOWN punk; + + TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj); + + hres = This->pfnCreateInstance(pOuter, (LPVOID *) &punk); + if (FAILED(hres)) { + *ppobj = NULL; + return hres; + } + hres = IUnknown_QueryInterface(punk, riid, ppobj); + if (FAILED(hres)) { + *ppobj = NULL; + return hres; + } + IUnknown_Release(punk); + return hres; +} + +static HRESULT WINAPI XFCF_LockServer(LPCLASSFACTORY iface, BOOL dolock) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n",This,dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) XFCF_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + XFCF_QueryInterface, + XFCF_AddRef, + XFCF_Release, + XFCF_CreateInstance, + XFCF_LockServer +}; + +/*********************************************************************** + * DirectXFileCreate (D3DXOF.@) + */ +HRESULT WINAPI DirectXFileCreate(LPDIRECTXFILE* lplpDirectXFile) +{ + HRESULT hr; + FIXME("(%p) Stub\n", lplpDirectXFile); + if (!lplpDirectXFile) + return DXFILEERR_BADVALUE; + + hr = XF_create(NULL, (LPVOID)lplpDirectXFile); + + if (FAILED(hr)) + return DXFILEERR_BADALLOC; + + return S_OK; +} + +/******************************************************************************* + * DllGetClassObject [D3DXOF.@] + * Retrieves class object from a DLL object + * + * NOTES + * Docs say returns STDAPI + * + * PARAMS + * rclsid [I] CLSID for the class object + * riid [I] Reference to identifier of interface for class object + * ppv [O] Address of variable to receive interface pointer for riid + * + * RETURNS + * Success: S_OK + * Failure: CLASS_E_CLASSNOTAVAILABLE, E_OUTOFMEMORY, E_INVALIDARG, + * E_UNEXPECTED + */ +DWORD WINAPI D3DXOF_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) +{ + int i; + IClassFactoryImpl *factory; + + TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); + + if ( !IsEqualGUID( &IID_IClassFactory, riid ) + && ! IsEqualGUID( &IID_IUnknown, riid) ) + return E_NOINTERFACE; + + for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++) + { + if (IsEqualGUID(object_creation[i].clsid, rclsid)) + break; + } + + if (i == sizeof(object_creation)/sizeof(object_creation[0])) + { + FIXME("%s: no class found.\n", debugstr_guid(rclsid)); + return CLASS_E_CLASSNOTAVAILABLE; + } + + factory = HeapAlloc(GetProcessHeap(), 0, sizeof(*factory)); + if (factory == NULL) return E_OUTOFMEMORY; + + factory->ITF_IClassFactory.lpVtbl = &XFCF_Vtbl; + factory->ref = 1; + + factory->pfnCreateInstance = object_creation[i].pfnCreateInstance; + + *ppv = &(factory->ITF_IClassFactory); + return S_OK; +} + +/*********************************************************************** + * DllCanUnloadNow (D3DXOF.@) + */ +HRESULT WINAPI D3DXOF_DllCanUnloadNow() +{ + return dll_ref != 0 ? S_FALSE : S_OK; +} diff --git a/dlls/d3dxof/regsvr.c b/dlls/d3dxof/regsvr.c new file mode 100644 index 0000000000000000000000000000000000000000..2ebec449e490856035e03ddc09331d126b899e1b --- /dev/null +++ b/dlls/d3dxof/regsvr.c @@ -0,0 +1,554 @@ +/* + * self-registerable dll functions for d3dxof.dll + * + * Copyright (C) 2003 John K. Hohm + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define COM_NO_WINDOWS_H +#include <stdarg.h> +#include <string.h> + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "winreg.h" +#include "winerror.h" + +#include "ole2.h" +#include "uuids.h" + +#include "dxfile.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(d3dxof); + +/* + * Near the bottom of this file are the exported DllRegisterServer and + * DllUnregisterServer, which make all this worthwhile. + */ + +/*********************************************************************** + * interface for self-registering + */ +struct regsvr_interface +{ + IID const *iid; /* NULL for end of list */ + LPCSTR name; /* can be NULL to omit */ + IID const *base_iid; /* can be NULL to omit */ + int num_methods; /* can be <0 to omit */ + CLSID const *ps_clsid; /* can be NULL to omit */ + CLSID const *ps_clsid32; /* can be NULL to omit */ +}; + +static HRESULT register_interfaces(struct regsvr_interface const *list); +static HRESULT unregister_interfaces(struct regsvr_interface const *list); + +struct regsvr_coclass +{ + CLSID const *clsid; /* NULL for end of list */ + LPCSTR name; /* can be NULL to omit */ + LPCSTR ips; /* can be NULL to omit */ + LPCSTR ips32; /* can be NULL to omit */ + LPCSTR ips32_tmodel; /* can be NULL to omit */ + LPCSTR progid; /* can be NULL to omit */ + LPCSTR viprogid; /* can be NULL to omit */ + LPCSTR progid_extra; /* can be NULL to omit */ +}; + +static HRESULT register_coclasses(struct regsvr_coclass const *list); +static HRESULT unregister_coclasses(struct regsvr_coclass const *list); + +/*********************************************************************** + * static string constants + */ +static WCHAR const interface_keyname[10] = { + 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e', 0 }; +static WCHAR const base_ifa_keyname[14] = { + 'B', 'a', 's', 'e', 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', + 'e', 0 }; +static WCHAR const num_methods_keyname[11] = { + 'N', 'u', 'm', 'M', 'e', 't', 'h', 'o', 'd', 's', 0 }; +static WCHAR const ps_clsid_keyname[15] = { + 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', + 'i', 'd', 0 }; +static WCHAR const ps_clsid32_keyname[17] = { + 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', + 'i', 'd', '3', '2', 0 }; +static WCHAR const clsid_keyname[6] = { + 'C', 'L', 'S', 'I', 'D', 0 }; +static WCHAR const curver_keyname[7] = { + 'C', 'u', 'r', 'V', 'e', 'r', 0 }; +static WCHAR const ips_keyname[13] = { + 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r', + 0 }; +static WCHAR const ips32_keyname[15] = { + 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r', + '3', '2', 0 }; +static WCHAR const progid_keyname[7] = { + 'P', 'r', 'o', 'g', 'I', 'D', 0 }; +static WCHAR const viprogid_keyname[25] = { + 'V', 'e', 'r', 's', 'i', 'o', 'n', 'I', 'n', 'd', 'e', 'p', + 'e', 'n', 'd', 'e', 'n', 't', 'P', 'r', 'o', 'g', 'I', 'D', + 0 }; +static char const tmodel_valuename[] = "ThreadingModel"; + +/*********************************************************************** + * static helper functions + */ +static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid); +static LONG register_key_defvalueW(HKEY base, WCHAR const *name, + WCHAR const *value); +static LONG register_key_defvalueA(HKEY base, WCHAR const *name, + char const *value); +static LONG register_progid(WCHAR const *clsid, + char const *progid, char const *curver_progid, + char const *name, char const *extra); +static LONG recursive_delete_key(HKEY key); +static LONG recursive_delete_keyA(HKEY base, char const *name); +static LONG recursive_delete_keyW(HKEY base, WCHAR const *name); + +/*********************************************************************** + * register_interfaces + */ +static HRESULT register_interfaces(struct regsvr_interface const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY interface_key; + + res = RegCreateKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &interface_key, NULL); + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->iid; ++list) { + WCHAR buf[39]; + HKEY iid_key; + + StringFromGUID2(list->iid, buf, 39); + res = RegCreateKeyExW(interface_key, buf, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &iid_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_interface_key; + + if (list->name) { + res = RegSetValueExA(iid_key, NULL, 0, REG_SZ, + (CONST BYTE*)(list->name), + strlen(list->name) + 1); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->base_iid) { + register_key_guid(iid_key, base_ifa_keyname, list->base_iid); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (0 <= list->num_methods) { + static WCHAR const fmt[3] = { '%', 'd', 0 }; + HKEY key; + + res = RegCreateKeyExW(iid_key, num_methods_keyname, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + + wsprintfW(buf, fmt, list->num_methods); + res = RegSetValueExW(key, NULL, 0, REG_SZ, + (CONST BYTE*)buf, + (lstrlenW(buf) + 1) * sizeof(WCHAR)); + RegCloseKey(key); + + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->ps_clsid) { + register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + if (list->ps_clsid32) { + register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32); + if (res != ERROR_SUCCESS) goto error_close_iid_key; + } + + error_close_iid_key: + RegCloseKey(iid_key); + } + +error_close_interface_key: + RegCloseKey(interface_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * unregister_interfaces + */ +static HRESULT unregister_interfaces(struct regsvr_interface const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY interface_key; + + res = RegOpenKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, + KEY_READ | KEY_WRITE, &interface_key); + if (res == ERROR_FILE_NOT_FOUND) return S_OK; + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->iid; ++list) { + WCHAR buf[39]; + + StringFromGUID2(list->iid, buf, 39); + res = recursive_delete_keyW(interface_key, buf); + } + + RegCloseKey(interface_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * register_coclasses + */ +static HRESULT register_coclasses(struct regsvr_coclass const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY coclass_key; + + res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL); + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->clsid; ++list) { + WCHAR buf[39]; + HKEY clsid_key; + + StringFromGUID2(list->clsid, buf, 39); + res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + + if (list->name) { + res = RegSetValueExA(clsid_key, NULL, 0, REG_SZ, + (CONST BYTE*)(list->name), + strlen(list->name) + 1); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->ips) { + res = register_key_defvalueA(clsid_key, ips_keyname, list->ips); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->ips32) { + HKEY ips32_key; + + res = RegCreateKeyExW(clsid_key, ips32_keyname, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, + &ips32_key, NULL); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = RegSetValueExA(ips32_key, NULL, 0, REG_SZ, + (CONST BYTE*)list->ips32, + lstrlenA(list->ips32) + 1); + if (res == ERROR_SUCCESS && list->ips32_tmodel) + res = RegSetValueExA(ips32_key, tmodel_valuename, 0, REG_SZ, + (CONST BYTE*)list->ips32_tmodel, + strlen(list->ips32_tmodel) + 1); + RegCloseKey(ips32_key); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->progid) { + res = register_key_defvalueA(clsid_key, progid_keyname, + list->progid); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = register_progid(buf, list->progid, NULL, + list->name, list->progid_extra); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + if (list->viprogid) { + res = register_key_defvalueA(clsid_key, viprogid_keyname, + list->viprogid); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + + res = register_progid(buf, list->viprogid, list->progid, + list->name, list->progid_extra); + if (res != ERROR_SUCCESS) goto error_close_clsid_key; + } + + error_close_clsid_key: + RegCloseKey(clsid_key); + } + +error_close_coclass_key: + RegCloseKey(coclass_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * unregister_coclasses + */ +static HRESULT unregister_coclasses(struct regsvr_coclass const *list) +{ + LONG res = ERROR_SUCCESS; + HKEY coclass_key; + + res = RegOpenKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, + KEY_READ | KEY_WRITE, &coclass_key); + if (res == ERROR_FILE_NOT_FOUND) return S_OK; + if (res != ERROR_SUCCESS) goto error_return; + + for (; res == ERROR_SUCCESS && list->clsid; ++list) { + WCHAR buf[39]; + + StringFromGUID2(list->clsid, buf, 39); + res = recursive_delete_keyW(coclass_key, buf); + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + + if (list->progid) { + res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->progid); + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + } + + if (list->viprogid) { + res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->viprogid); + if (res != ERROR_SUCCESS) goto error_close_coclass_key; + } + } + +error_close_coclass_key: + RegCloseKey(coclass_key); +error_return: + return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; +} + +/*********************************************************************** + * regsvr_key_guid + */ +static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) +{ + WCHAR buf[39]; + + StringFromGUID2(guid, buf, 39); + return register_key_defvalueW(base, name, buf); +} + +/*********************************************************************** + * regsvr_key_defvalueW + */ +static LONG register_key_defvalueW( + HKEY base, + WCHAR const *name, + WCHAR const *value) +{ + LONG res; + HKEY key; + + res = RegCreateKeyExW(base, name, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) return res; + res = RegSetValueExW(key, NULL, 0, REG_SZ, (CONST BYTE*)value, + (lstrlenW(value) + 1) * sizeof(WCHAR)); + RegCloseKey(key); + return res; +} + +/*********************************************************************** + * regsvr_key_defvalueA + */ +static LONG register_key_defvalueA( + HKEY base, + WCHAR const *name, + char const *value) +{ + LONG res; + HKEY key; + + res = RegCreateKeyExW(base, name, 0, NULL, 0, + KEY_READ | KEY_WRITE, NULL, &key, NULL); + if (res != ERROR_SUCCESS) return res; + res = RegSetValueExA(key, NULL, 0, REG_SZ, (CONST BYTE*)value, + lstrlenA(value) + 1); + RegCloseKey(key); + return res; +} + +/*********************************************************************** + * regsvr_progid + */ +static LONG register_progid( + WCHAR const *clsid, + char const *progid, + char const *curver_progid, + char const *name, + char const *extra) +{ + LONG res; + HKEY progid_key; + + res = RegCreateKeyExA(HKEY_CLASSES_ROOT, progid, 0, + NULL, 0, KEY_READ | KEY_WRITE, NULL, + &progid_key, NULL); + if (res != ERROR_SUCCESS) return res; + + if (name) { + res = RegSetValueExA(progid_key, NULL, 0, REG_SZ, + (CONST BYTE*)name, strlen(name) + 1); + if (res != ERROR_SUCCESS) goto error_close_progid_key; + } + + if (clsid) { + res = register_key_defvalueW(progid_key, clsid_keyname, clsid); + if (res != ERROR_SUCCESS) goto error_close_progid_key; + } + + if (curver_progid) { + res = register_key_defvalueA(progid_key, curver_keyname, + curver_progid); + if (res != ERROR_SUCCESS) goto error_close_progid_key; + } + + if (extra) { + HKEY extra_key; + + res = RegCreateKeyExA(progid_key, extra, 0, + NULL, 0, KEY_READ | KEY_WRITE, NULL, + &extra_key, NULL); + if (res == ERROR_SUCCESS) + RegCloseKey(extra_key); + } + +error_close_progid_key: + RegCloseKey(progid_key); + return res; +} + +/*********************************************************************** + * recursive_delete_key + */ +static LONG recursive_delete_key(HKEY key) +{ + LONG res; + WCHAR subkey_name[MAX_PATH]; + DWORD cName; + HKEY subkey; + + for (;;) { + cName = sizeof(subkey_name) / sizeof(WCHAR); + res = RegEnumKeyExW(key, 0, subkey_name, &cName, + NULL, NULL, NULL, NULL); + if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) { + res = ERROR_SUCCESS; /* presumably we're done enumerating */ + break; + } + res = RegOpenKeyExW(key, subkey_name, 0, + KEY_READ | KEY_WRITE, &subkey); + if (res == ERROR_FILE_NOT_FOUND) continue; + if (res != ERROR_SUCCESS) break; + + res = recursive_delete_key(subkey); + RegCloseKey(subkey); + if (res != ERROR_SUCCESS) break; + } + + if (res == ERROR_SUCCESS) res = RegDeleteKeyW(key, 0); + return res; +} + +/*********************************************************************** + * recursive_delete_keyA + */ +static LONG recursive_delete_keyA(HKEY base, char const *name) +{ + LONG res; + HKEY key; + + res = RegOpenKeyExA(base, name, 0, KEY_READ | KEY_WRITE, &key); + if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS; + if (res != ERROR_SUCCESS) return res; + res = recursive_delete_key(key); + RegCloseKey(key); + return res; +} + +/*********************************************************************** + * recursive_delete_keyW + */ +static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) +{ + LONG res; + HKEY key; + + res = RegOpenKeyExW(base, name, 0, KEY_READ | KEY_WRITE, &key); + if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS; + if (res != ERROR_SUCCESS) return res; + res = recursive_delete_key(key); + RegCloseKey(key); + return res; +} + +/*********************************************************************** + * coclass list + */ +static struct regsvr_coclass const coclass_list[] = { + { &CLSID_CDirectXFile, + "DirectX File", + NULL, + "d3dxof.dll", + "Both" + }, + { NULL } /* list terminator */ +}; + +/*********************************************************************** + * interface list + */ + +static struct regsvr_interface const interface_list[] = { + { NULL } /* list terminator */ +}; + +/*********************************************************************** + * DllRegisterServer (D3DXOF.@) + */ +HRESULT WINAPI D3DXOF_DllRegisterServer(void) +{ + HRESULT hr; + + TRACE("\n"); + + hr = register_coclasses(coclass_list); + if (SUCCEEDED(hr)) + hr = register_interfaces(interface_list); + return hr; +} + +/*********************************************************************** + * DllUnregisterServer (D3DXOF.@) + */ +HRESULT WINAPI D3DXOF_DllUnregisterServer(void) +{ + HRESULT hr; + + TRACE("\n"); + + hr = unregister_coclasses(coclass_list); + if (SUCCEEDED(hr)) + hr = unregister_interfaces(interface_list); + return hr; +} diff --git a/dlls/d3dxof/version.rc b/dlls/d3dxof/version.rc new file mode 100644 index 0000000000000000000000000000000000000000..95871f7131324e50a1f3d08a2fdcbba29e59f513 --- /dev/null +++ b/dlls/d3dxof/version.rc @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2004 Christian Costa + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define WINE_FILEDESCRIPTION_STR "DirectX Files dll" +#define WINE_FILENAME_STR "d3dxof.dll" +#define WINE_FILEVERSION 5,0,2135,1 +#define WINE_FILEVERSION_STR "5.0.2135.1" +#define WINE_PRODUCTVERSION 5,0,2135,1 +#define WINE_PRODUCTVERSION_STR "5.0.2135.1" +#define WINE_PRODUCTNAME_STR "Direct3D" + +#include "wine/wine_common_ver.rc" diff --git a/dlls/dxguid/dxguid.c b/dlls/dxguid/dxguid.c index 83db7f986ce0a6549064c50e36ef7fabd8b79b2f..211df12bc1e0936a89a483a90e6fe4b1a627b5a6 100644 --- a/dlls/dxguid/dxguid.c +++ b/dlls/dxguid/dxguid.c @@ -44,3 +44,4 @@ #include "dplobby.h" #include "dinput.h" #include "ddrawi.h" +#include "dxfile.h" diff --git a/documentation/samples/config b/documentation/samples/config index 54750fab83de8ea0c37c719fc3a7b36e7b69553e..5ef8b86d9d4889d9589d374d165c758ee9f1fb4f 100644 --- a/documentation/samples/config +++ b/documentation/samples/config @@ -41,6 +41,7 @@ WINE REGISTRY Version 2 "mcianim.drv" = "native, builtin" "msi" = "native, builtin" "d3drm" = "native, builtin" +"d3dxof" = "native, builtin" "dpnhpast" = "native, builtin" ; you can specify applications too ; this one will apply for all notepad.exe diff --git a/include/Makefile.in b/include/Makefile.in index 2346f46a902c44237b053f4e0a1fb0ec25208e73..037db11b0e842dc92d27b2d44fbf745316ce2934 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -93,6 +93,7 @@ WINDOWS_INCLUDES = \ dxdiag.h \ dxerr8.h \ dxerr9.h \ + dxfile.h \ evcode.h \ excpt.h \ fci.h \ diff --git a/include/dxfile.h b/include/dxfile.h new file mode 100644 index 0000000000000000000000000000000000000000..73535c47d1fdec30351ff4bc162000544693c3dd --- /dev/null +++ b/include/dxfile.h @@ -0,0 +1,272 @@ +/* + * Copyright 2004 Christian Costa + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_DXFILE_H +#define __WINE_DXFILE_H + +#include <objbase.h> +#include <winnt.h> + +#ifdef __cplusplus +extern "C" { +#endif /* defined(__cplusplus) */ + +typedef DWORD DXFILEFORMAT; + +#define DXFILEFORMAT_BINARY 0 +#define DXFILEFORMAT_TEXT 1 +#define DXFILEFORMAT_COMPRESSED 2 + +typedef DWORD DXFILELOADOPTIONS; + +#define DXFILELOAD_FROMFILE 0x00L +#define DXFILELOAD_FROMRESOURCE 0x01L +#define DXFILELOAD_FROMMEMORY 0x02L +#define DXFILELOAD_FROMSTREAM 0x04L +#define DXFILELOAD_FROMURL 0x08L + +typedef struct _DXFILELOADRESOURCE { + HMODULE hModule; + LPCSTR /*LPCTSTR*/ lpName; + LPCSTR /*LPCTSTR*/ lpType; +} DXFILELOADRESOURCE, *LPDXFILELOADRESOURCE; + +typedef struct _DXFILELOADMEMORY { + LPVOID lpMemory; + DWORD dSize; +} DXFILELOADMEMORY, *LPDXFILELOADMEMORY; + +typedef struct IDirectXFile IDirectXFile, *LPDIRECTXFILE; +typedef struct IDirectXFileEnumObject IDirectXFileEnumObject, *LPDIRECTXFILEENUMOBJECT; +typedef struct IDirectXFileSaveObject IDirectXFileSaveObject, *LPDIRECTXFILESAVEOBJECT; +typedef struct IDirectXFileObject IDirectXFileObject, *LPDIRECTXFILEOBJECT; +typedef struct IDirectXFileData IDirectXFileData, *LPDIRECTXFILEDATA; +typedef struct IDirectXFileDataReference IDirectXFileDataReference, *LPDIRECTXFILEDATAREFERENCE; +typedef struct IDirectXFileBinary IDirectXFileBinary, *LPDIRECTXFILEBINARY; + +STDAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile); + +#define INTERFACE IDirectXFile +#define IDirectXFile_METHODS \ + IUnknown_METHODS \ + STDMETHOD(CreateEnumObject) (THIS_ LPVOID, DXFILELOADOPTIONS, LPDIRECTXFILEENUMOBJECT *) PURE; \ + STDMETHOD(CreateSaveObject) (THIS_ LPCSTR, DXFILEFORMAT, LPDIRECTXFILESAVEOBJECT *) PURE; \ + STDMETHOD(RegisterTemplates) (THIS_ LPVOID, DWORD) PURE; +ICOM_DEFINE(IDirectXFile,IUnknown) +#undef INTERFACE + +#ifdef COBJMACROS + /*** IUnknown methods ***/ +#define IDirectXFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFile_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFile_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFile methods ***/ +#define IDirectXFile_CreateEnumObject(p,a,b,c) (p)->lpVtbl->CreateEnumObject(p,a,b,c) +#define IDirectXFile_CreateSaveObject(p,a,b,c) (p)->lpVtbl->CreateSaveObject(p,a,b,c) +#define IDirectXFile_RegisterTemplates(p,a,b) (p)->lpVtbl->RegisterTemplates(p,a,b) +#endif + +#define INTERFACE IDirectXFileEnumObject +#define IDirectXFileEnumObject_METHODS \ + IUnknown_METHODS \ + STDMETHOD(GetNextDataObject) (THIS_ LPDIRECTXFILEDATA *) PURE; \ + STDMETHOD(GetDataObjectById) (THIS_ REFGUID, LPDIRECTXFILEDATA *) PURE; \ + STDMETHOD(GetDataObjectByName) (THIS_ LPCSTR, LPDIRECTXFILEDATA *) PURE; +ICOM_DEFINE(IDirectXFileEnumObject,IUnknown) +#undef INTERFACE + +#ifdef COBJMACROS + /*** IUnknown methods ***/ +#define IDirectXFileEnumObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileEnumObject_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileEnumObject_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileEnumObject methods ***/ +#define IDirectXFileEnumObject_GetNextDataObject(p,a) (p)->lpVtbl->GetNextDataObject(p,a) +#define IDirectXFileEnumObject_GetDataObjectById(p,a,b) (p)->lpVtbl->GetDataObjectById(p,a,b) +#define IDirectXFileEnumObject_GetDataObjectByName(p,a,b) (p)->lpVtbl->GetDataObjectByName(p,a,b) +#endif + +#define INTERFACE IDirectXFileSaveObject +#define IDirectXFileSaveObject_METHODS \ + IUnknown_METHODS \ + STDMETHOD(SaveTemplates) (THIS_ DWORD, const GUID **) PURE; \ + STDMETHOD(CreateDataObject) (THIS_ REFGUID, LPCSTR, const GUID *, DWORD, LPVOID, LPDIRECTXFILEDATA *) PURE; \ + STDMETHOD(SaveData) (THIS_ LPDIRECTXFILEDATA) PURE; +ICOM_DEFINE(IDirectXFileSaveObject,IUnknown) +#undef INTERFACE + +#ifdef COBJMACROS + /*** IUnknown methods ***/ +#define IDirectXFileSaveObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileSaveObject_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileSaveObject_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileSaveObject methods ***/ +#define IDirectXFileSaveObject_SaveTemplates(p,a,b) (p)->lpVtbl->SaveTemplates(p,a,b) +#define IDirectXFileSaveObject_CreateDataObject(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDataObject(p,a,b,c,d,e,f) +#define IDirectXFileSaveObject_SaveData(p,a) (p)->lpVtbl->SaveData(p,a) +#endif + +#define IDIRECTXFILEOBJECT_METHODS \ + STDMETHOD(GetName) (THIS_ LPSTR, LPDWORD) PURE; \ + STDMETHOD(GetId) (THIS_ LPGUID) PURE; + +#define INTERFACE IDirectXFileObject +#define IDirectXFileObject_METHODS \ + IUnknown_METHODS \ + IDIRECTXFILEOBJECT_METHODS +ICOM_DEFINE(IDirectXFileObject,IUnknown) +#undef INTERFACE + +#ifdef COBJMACROS + /*** IUnknown methods ***/ +#define IDirectXFileObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileObject_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileObject_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileObject methods ***/ +#define IDirectXFileObject_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) +#define IDirectXFileObject_GetId(p,a) (p)->lpVtbl->GetId(p,a) +#endif + +#define INTERFACE IDirectXFileData +#define IDirectXFileData_METHODS \ + IUnknown_METHODS \ + IDIRECTXFILEOBJECT_METHODS \ + STDMETHOD(GetData) (THIS_ LPCSTR, DWORD *, void **) PURE; \ + STDMETHOD(GetType) (THIS_ const GUID **) PURE; \ + STDMETHOD(GetNextObject) (THIS_ LPDIRECTXFILEOBJECT *) PURE; \ + STDMETHOD(AddDataObject) (THIS_ LPDIRECTXFILEDATA) PURE; \ + STDMETHOD(AddDataReference) (THIS_ LPCSTR, const GUID *) PURE; \ + STDMETHOD(AddBinaryObject) (THIS_ LPCSTR, const GUID *, LPCSTR, LPVOID, DWORD) PURE; +ICOM_DEFINE(IDirectXFileData,IDirectXFileObject) +#undef INTERFACE + +#ifdef COBJMACROS + /*** IUnknown methods ***/ +#define IDirectXFileData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileData_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileData_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileObject methods ***/ +#define IDirectXFileData_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) +#define IDirectXFileData_GetId(p,a) (p)->lpVtbl->GetId(p,a) + /*** IDirectXFileData methods ***/ +#define IDirectXFileData_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c) +#define IDirectXFileData_GetType(p,a) (p)->lpVtbl->GetType(p,a) +#define IDirectXFileData_GetNextObject(p,a) (p)->lpVtbl->GetNextObject(p,a) +#define IDirectXFileData_AddDataObject(p,a) (p)->lpVtbl->AddDataObject(p,a) +#define IDirectXFileData_AddDataReference(p,a,b) (p)->lpVtbl->AddDataReference(p,a,b) +#define IDirectXFileData_AddBinaryObject(p,a,b,c,d,e) (p)->lpVtbl->AddBinaryObject(p,a,b,c,d,e) +#endif + +#define INTERFACE IDirectXFileDataReference +#define IDirectXFileDataReference_METHODS \ + IUnknown_METHODS \ + IDIRECTXFILEOBJECT_METHODS \ + STDMETHOD(Resolve) (THIS_ LPDIRECTXFILEDATA *) PURE; +ICOM_DEFINE(IDirectXFileDataReference,IDirectXFileObject) +#undef INTERFACE + +#ifdef COBJMACROS + /*** IUnknown methods ***/ +#define IDirectXFileData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileData_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileData_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileObject methods ***/ +#define IDirectXFileData_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) +#define IDirectXFileData_GetId(p,a) (p)->lpVtbl->GetId(p,a) + /*** IDirectXFileDataReference methods ***/ +#define IDirectXFileData_Resolve(p,a) (p)->lpVtbl->GetData(p,a) +#endif + +#define INTERFACE IDirectXFileBinary +#define IDirectXFileBinary_METHODS \ + IUnknown_METHODS \ + IDIRECTXFILEOBJECT_METHODS \ + STDMETHOD(GetSize) (THIS_ DWORD *) PURE; \ + STDMETHOD(GetMimeType) (THIS_ LPCSTR *) PURE; \ + STDMETHOD(Read) (THIS_ LPVOID, DWORD, LPDWORD) PURE; +ICOM_DEFINE(IDirectXFileBinary,IDirectXFileObject) +#undef INTERFACE + +#ifdef COBJMACROS + /*** IUnknown methods ***/ +#define IDirectXFileBinary_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectXFileBinary_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectXFileBinary_Release(p) (p)->lpVtbl->Release(p) + /*** IDirectXFileObject methods ***/ +#define IDirectXFileBinary_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b) +#define IDirectXFileBinary_GetId(p,a) (p)->lpVtbl->GetId(p,a) + /*** IDirectXFileBinary methods ***/ +#define IDirectXFileBinary_GetSize(p,a) (p)->lpVtbl->GetSize(p,a) +#define IDirectXFileBinary_GetMimeType(p,a) (p)->lpVtbl->GetMimeType(p,a) +#define IDirectXFileBinary_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c) +#endif + +/* DirectXFile Object CLSID */ +DEFINE_GUID(CLSID_CDirectXFile, 0x4516ec43, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3); + +/* DirectX File Interface GUIDs */ +DEFINE_GUID(IID_IDirectXFile, 0x3d82ab40, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileEnumObject, 0x3d82ab41, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileSaveObject, 0x3d82ab42, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileObject, 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileData, 0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileDataReference, 0x3d82ab45, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); +DEFINE_GUID(IID_IDirectXFileBinary, 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); + +/* DirectX File Header template's GUID */ +DEFINE_GUID(TID_DXFILEHeader, 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33); + +/* DirectX File errors */ +#define _FACDD 0x876 +#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) + +#define DXFILE_OK 0 + +#define DXFILEERR_BADOBJECT MAKE_DDHRESULT(850) +#define DXFILEERR_BADVALUE MAKE_DDHRESULT(851) +#define DXFILEERR_BADTYPE MAKE_DDHRESULT(852) +#define DXFILEERR_BADSTREAMHANDLE MAKE_DDHRESULT(853) +#define DXFILEERR_BADALLOC MAKE_DDHRESULT(854) +#define DXFILEERR_NOTFOUND MAKE_DDHRESULT(855) +#define DXFILEERR_NOTDONEYET MAKE_DDHRESULT(856) +#define DXFILEERR_FILENOTFOUND MAKE_DDHRESULT(857) +#define DXFILEERR_RESOURCENOTFOUND MAKE_DDHRESULT(858) +#define DXFILEERR_URLNOTFOUND MAKE_DDHRESULT(859) +#define DXFILEERR_BADRESOURCE MAKE_DDHRESULT(860) +#define DXFILEERR_BADFILETYPE MAKE_DDHRESULT(861) +#define DXFILEERR_BADFILEVERSION MAKE_DDHRESULT(862) +#define DXFILEERR_BADFILEFLOATSIZE MAKE_DDHRESULT(863) +#define DXFILEERR_BADFILECOMPRESSIONTYPE MAKE_DDHRESULT(864) +#define DXFILEERR_BADFILE MAKE_DDHRESULT(865) +#define DXFILEERR_PARSEERROR MAKE_DDHRESULT(866) +#define DXFILEERR_NOTEMPLATE MAKE_DDHRESULT(867) +#define DXFILEERR_BADARRAYSIZE MAKE_DDHRESULT(868) +#define DXFILEERR_BADDATAREFERENCE MAKE_DDHRESULT(869) +#define DXFILEERR_INTERNALERROR MAKE_DDHRESULT(870) +#define DXFILEERR_NOMOREOBJECTS MAKE_DDHRESULT(871) +#define DXFILEERR_BADINTRINSICS MAKE_DDHRESULT(872) +#define DXFILEERR_NOMORESTREAMHANDLES MAKE_DDHRESULT(873) +#define DXFILEERR_NOMOREDATA MAKE_DDHRESULT(874) +#define DXFILEERR_BADCACHEFILE MAKE_DDHRESULT(875) +#define DXFILEERR_NOINTERNET MAKE_DDHRESULT(876) + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* defined(__cplusplus) */ + +#endif /* __WINE_DXFILE_H */ diff --git a/tools/wine.inf b/tools/wine.inf index 37edf3f8b918cd1d17834ed2b05a26f17d87e075..a24d0af006a29d6ad63f133040401f70aa0d9838 100644 --- a/tools/wine.inf +++ b/tools/wine.inf @@ -2005,6 +2005,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G" 11,,avifil32.dll,1 11,,amstream.dll,1 11,,comcat.dll,1 +11,,d3dxof.dll,1 11,,ddraw.dll,1 11,,devenum.dll,1 11,,dinput.dll,1