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 + -
显示快捷键?