thunks.c

来自「Wine-20031016」· C语言 代码 · 共 1,034 行 · 第 1/2 页

C
1,034
字号
/* Direct Draw Thunks and old vtables * Copyright 2000 TransGaming Technologies Inc. * * 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 <stdarg.h>#include "windef.h"#include "winbase.h"#include "wingdi.h"#include "ddraw.h"#include "ddraw_private.h"#include "ddcomimpl.h"static HRESULT WINAPIIDirectDrawImpl_QueryInterface(LPDIRECTDRAW This, REFIID iid, LPVOID *ppObj){    return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,							  IDirectDraw,							  IDirectDraw7, This),				       iid, ppObj);}static HRESULT WINAPIIDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This, REFIID iid, LPVOID *ppObj){    return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,							  IDirectDraw2,							  IDirectDraw7, This),				       iid, ppObj);}static HRESULT WINAPIIDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This, REFIID iid, LPVOID *ppObj){    return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,							  IDirectDraw4,							  IDirectDraw7, This),				       iid, ppObj);}static ULONG WINAPIIDirectDrawImpl_AddRef(LPDIRECTDRAW This){    return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,						  IDirectDraw, IDirectDraw7,						  This));}static ULONG WINAPIIDirectDraw2Impl_AddRef(LPDIRECTDRAW2 This){    return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,						  IDirectDraw2, IDirectDraw7,						  This));}static ULONG WINAPIIDirectDraw4Impl_AddRef(LPDIRECTDRAW4 This){    return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl,						  IDirectDraw4, IDirectDraw7,						  This));}static ULONG WINAPIIDirectDrawImpl_Release(LPDIRECTDRAW This){    return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw, IDirectDraw7,						   This));}static ULONG WINAPIIDirectDraw2Impl_Release(LPDIRECTDRAW2 This){    return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw2, IDirectDraw7,						   This));}static ULONG WINAPIIDirectDraw4Impl_Release(LPDIRECTDRAW4 This){    return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw4, IDirectDraw7,						   This));}static HRESULT WINAPIIDirectDrawImpl_Compact(LPDIRECTDRAW This){    return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw, IDirectDraw7,						   This));}static HRESULT WINAPIIDirectDraw2Impl_Compact(LPDIRECTDRAW2 This){    return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw2, IDirectDraw7,						   This));}static HRESULT WINAPIIDirectDraw4Impl_Compact(LPDIRECTDRAW4 This){    return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw4, IDirectDraw7,						   This));}static HRESULT WINAPIIDirectDrawImpl_CreateClipper(LPDIRECTDRAW This, DWORD dwFlags,			      LPDIRECTDRAWCLIPPER *ppClipper,			      IUnknown *pUnkOuter){    return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,							 IDirectDraw,							 IDirectDraw7,							 This),				      dwFlags, ppClipper, pUnkOuter);}static HRESULT WINAPIIDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This, DWORD dwFlags,			       LPDIRECTDRAWCLIPPER *ppClipper,			       IUnknown *pUnkOuter){    return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,							 IDirectDraw2,							 IDirectDraw7,							 This),				      dwFlags, ppClipper, pUnkOuter);}static HRESULT WINAPIIDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This, DWORD dwFlags,			       LPDIRECTDRAWCLIPPER *ppClipper,			       IUnknown *pUnkOuter){    return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,							 IDirectDraw4,							 IDirectDraw7,							 This),				      dwFlags, ppClipper, pUnkOuter);}static HRESULT WINAPIIDirectDrawImpl_CreatePalette(LPDIRECTDRAW This, DWORD dwFlags,			      LPPALETTEENTRY pEntries,			      LPDIRECTDRAWPALETTE *ppPalette,			      IUnknown *pUnkOuter){    return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,							 IDirectDraw,							 IDirectDraw7,							 This),				      dwFlags, pEntries, ppPalette, pUnkOuter);}static HRESULT WINAPIIDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This, DWORD dwFlags,			       LPPALETTEENTRY pEntries,			       LPDIRECTDRAWPALETTE *ppPalette,			       IUnknown *pUnkOuter){    return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,							 IDirectDraw2,							 IDirectDraw7,							 This),				      dwFlags, pEntries, ppPalette, pUnkOuter);}static HRESULT WINAPIIDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This, DWORD dwFlags,			       LPPALETTEENTRY pEntries,			       LPDIRECTDRAWPALETTE *ppPalette,			       IUnknown *pUnkOuter){    return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,							 IDirectDraw4,							 IDirectDraw7,							 This),				      dwFlags, pEntries, ppPalette, pUnkOuter);}static HRESULT WINAPIIDirectDrawImpl_CreateSurface(LPDIRECTDRAW This, LPDDSURFACEDESC pSDesc,			      LPDIRECTDRAWSURFACE *ppSurface,			      IUnknown *pUnkOuter){    LPDIRECTDRAWSURFACE7 pSurface7;    HRESULT hr;    /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,     * since the data layout is the same */    hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,						       IDirectDraw,						       IDirectDraw7,						       This),				    (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);    /* This coercion is safe, since the IDirectDrawSurface3 vtable has the     * IDirectDrawSurface vtable layout at the beginning  */    *ppSurface = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,				    IDirectDrawSurface7, IDirectDrawSurface3,				    pSurface7);    return hr;}static HRESULT WINAPIIDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This, LPDDSURFACEDESC pSDesc,			       LPDIRECTDRAWSURFACE *ppSurface,			       IUnknown *pUnkOuter){    LPDIRECTDRAWSURFACE7 pSurface7;    HRESULT hr;    hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,						       IDirectDraw2,						       IDirectDraw7,						       This),				    (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);    /* This coercion is safe, since the IDirectDrawSurface3 vtable has the     * IDirectDrawSurface vtable layout at the beginning  */    *ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,				    IDirectDrawSurface7, IDirectDrawSurface3,				    pSurface7);    return hr;}static HRESULT WINAPIIDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pSDesc,			       LPDIRECTDRAWSURFACE4 *ppSurface,			       IUnknown *pUnkOuter){    return IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,							 IDirectDraw4,							 IDirectDraw7,							 This),				      pSDesc,				      (LPDIRECTDRAWSURFACE7 *)ppSurface,				      pUnkOuter);}static HRESULT WINAPIIDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE pSrc,				 LPDIRECTDRAWSURFACE *ppDst){    LPDIRECTDRAWSURFACE7 pDst7;    HRESULT hr;    hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,							  IDirectDraw,							  IDirectDraw7, This),				       COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,							  IDirectDrawSurface3,							  IDirectDrawSurface7,							  pSrc),				       &pDst7);    /* This coercion is safe, since the IDirectDrawSurface3 vtable has the     * IDirectDrawSurface vtable layout at the beginning  */    *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,				IDirectDrawSurface3, pDst7);    return hr;}static HRESULT WINAPIIDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE pSrc,				  LPDIRECTDRAWSURFACE *ppDst){    LPDIRECTDRAWSURFACE7 pDst7;    HRESULT hr;    hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,							  IDirectDraw2,							  IDirectDraw7, This),				       COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,							  IDirectDrawSurface3,							  IDirectDrawSurface7,							  pSrc),				       &pDst7);    /* This coercion is safe, since the IDirectDrawSurface3 vtable has the     * IDirectDrawSurface vtable layout at the beginning  */    *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,				IDirectDrawSurface3, pDst7);    return hr;}static HRESULT WINAPIIDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This,				  LPDIRECTDRAWSURFACE4 pSrc,				  LPDIRECTDRAWSURFACE4 *ppDst){    return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,							    IDirectDraw4,							    IDirectDraw7,							    This),					 (LPDIRECTDRAWSURFACE7)pSrc,					 (LPDIRECTDRAWSURFACE7 *)ppDst);}struct displaymodescallback_context{    LPDDENUMMODESCALLBACK func;    LPVOID context;};static HRESULT CALLBACKEnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2, LPVOID context){    DDSURFACEDESC DDSD;    struct displaymodescallback_context *cbcontext = context;    memcpy(&DDSD,pDDSD2,sizeof(DDSD));    DDSD.dwSize = sizeof(DDSD);    return cbcontext->func(&DDSD, cbcontext->context);}static HRESULT WINAPIIDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This, DWORD dwFlags,				 LPDDSURFACEDESC pDDSD, LPVOID context,				 LPDDENUMMODESCALLBACK cb){    struct displaymodescallback_context cbcontext;    cbcontext.func    = cb;    cbcontext.context = context;    return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,							    IDirectDraw,							    IDirectDraw7,							    This),					 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,					 EnumDisplayModesCallbackThunk);}static HRESULT WINAPIIDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This, DWORD dwFlags,				  LPDDSURFACEDESC pDDSD, LPVOID context,				  LPDDENUMMODESCALLBACK cb){    struct displaymodescallback_context cbcontext;    cbcontext.func    = cb;    cbcontext.context = context;    return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,							    IDirectDraw2,							    IDirectDraw7,							    This),					 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,					 EnumDisplayModesCallbackThunk);}static HRESULT WINAPIIDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This, DWORD dwFlags,				  LPDDSURFACEDESC2 pDDSD, LPVOID context,				  LPDDENUMMODESCALLBACK2 cb){    return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,							    IDirectDraw4,							    IDirectDraw7,							    This),					 dwFlags, pDDSD, context, cb);}struct surfacescallback_context{    LPDDENUMSURFACESCALLBACK func;    LPVOID context;};static HRESULT CALLBACKEnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf, LPDDSURFACEDESC2 pDDSD,			  LPVOID context){    struct surfacescallback_context *cbcontext = context;    /* This coercion is safe, since the IDirectDrawSurface3 vtable has the     * IDirectDrawSurface vtable layout at the beginning  */    return cbcontext->func((LPDIRECTDRAWSURFACE)                           COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,					      IDirectDrawSurface7,					      IDirectDrawSurface3, pSurf),			   (LPDDSURFACEDESC)pDDSD, cbcontext->context);}static HRESULT WINAPIIDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This, DWORD dwFlags,			     LPDDSURFACEDESC pDDSD, LPVOID context,			     LPDDENUMSURFACESCALLBACK cb){    struct surfacescallback_context cbcontext;    cbcontext.func    = cb;    cbcontext.context = context;    return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,							IDirectDraw,							IDirectDraw7, This),				     dwFlags, (LPDDSURFACEDESC2)pDDSD,				     &cbcontext, EnumSurfacesCallbackThunk);}static HRESULT WINAPIIDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This, DWORD dwFlags,			      LPDDSURFACEDESC pDDSD, LPVOID context,			      LPDDENUMSURFACESCALLBACK cb){    struct surfacescallback_context cbcontext;    cbcontext.func    = cb;    cbcontext.context = context;    return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,							IDirectDraw2,							IDirectDraw7, This),				     dwFlags, (LPDDSURFACEDESC2)pDDSD,				     &cbcontext, EnumSurfacesCallbackThunk);}static HRESULT WINAPIIDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This, DWORD dwFlags,			      LPDDSURFACEDESC2 pDDSD, LPVOID context,			      LPDDENUMSURFACESCALLBACK2 cb){    return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,							IDirectDraw4,							IDirectDraw7, This),				     dwFlags, pDDSD, context,				     (LPDDENUMSURFACESCALLBACK7)cb);}static HRESULT WINAPIIDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This){    return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,							    IDirectDraw,							    IDirectDraw7,							    This));}static HRESULT WINAPIIDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This){    return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,							    IDirectDraw2,							    IDirectDraw7,							    This));}static HRESULT WINAPIIDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This){    return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,							    IDirectDraw4,							    IDirectDraw7,							    This));}static HRESULT WINAPIIDirectDrawImpl_GetCaps(LPDIRECTDRAW This, LPDDCAPS pDDC1, LPDDCAPS pDDC2){    return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw, IDirectDraw7,						   This), pDDC1, pDDC2);}static HRESULT WINAPIIDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2){    return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw2, IDirectDraw7,						   This), pDDC1, pDDC2);}static HRESULT WINAPIIDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2){    return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,						   IDirectDraw4, IDirectDraw7,						   This), pDDC1, pDDC2);}static HRESULT WINAPIIDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This, LPDDSURFACEDESC pDDSD){    return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,							  IDirectDraw,							  IDirectDraw7, This),				       (LPDDSURFACEDESC2)pDDSD);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?