From: José Fonseca Date: Wed, 25 May 2011 22:21:18 +0000 (+0100) Subject: Several DX7 corrections. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=bb8760bc379ec3c37db0d18c9972b3c4c3df1179;p=apitrace Several DX7 corrections. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bb87ff..afa082c 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,7 @@ if (MSVC) add_definitions (-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) add_definitions (-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS) add_definitions (-W4) + add_definitions (-wd4063) # not a valid value for switch of enum add_definitions (-wd4127) # conditional expression is constant add_definitions (-wd4244) # conversion from 'type1' to 'type2', possible loss of data add_definitions (-wd4505) # unreferenced local function has been removed diff --git a/d3d.py b/d3d.py index 9deed97..256832f 100644 --- a/d3d.py +++ b/d3d.py @@ -472,6 +472,13 @@ ddraw.add_interfaces(interfaces) class DDrawTracer(DllTracer): + def trace_function_impl_body(self, function): + if function.name in ('AcquireDDThreadLock', 'ReleaseDDThreadLock'): + self.dispatch_function(function) + return + + DllTracer.trace_function_impl_body(self, function) + def wrap_arg(self, function, arg): if function.name == 'DirectDrawCreateEx' and arg.name == 'lplpDD': print ' if (*lplpDD) {' @@ -480,12 +487,8 @@ class DDrawTracer(DllTracer): print ' *lplpDD = (LPVOID) new Wrap%s((%s *)*lplpDD);' % (iface.name, iface.name) print ' }' print ' }' - # Dump shaders as strings - if function.name in ('CreateVertexShader', 'CreatePixelShader') and arg.name == 'pFunction': - print ' DumpShader(%s);' % (arg.name) - return - DllTracer.dump_arg_instance(self, function, arg) + DllTracer.wrap_arg(self, function, arg) if __name__ == '__main__': diff --git a/ddraw.def b/ddraw.def index 155162a..6186c60 100644 --- a/ddraw.def +++ b/ddraw.def @@ -1,13 +1,23 @@ EXPORTS - DirectDrawCreate - DirectDrawCreateClipper - DirectDrawCreateEx - DirectDrawEnumerateA - DirectDrawEnumerateW - DirectDrawEnumerateExA - DirectDrawEnumerateExW - AcquireDDThreadLock - ReleaseDDThreadLock - D3DParseUnknownCommand - DllCanUnloadNow - DllGetClassObject + AcquireDDThreadLock + CompleteCreateSysmemSurface + D3DParseUnknownCommand + DDGetAttachedSurfaceLcl + DDInternalLock + DDInternalUnlock + DirectDrawCreate + DirectDrawCreateClipper + DirectDrawCreateEx + DirectDrawEnumerateA + DirectDrawEnumerateExA + DirectDrawEnumerateExW + DirectDrawEnumerateW + DllCanUnloadNow PRIVATE + DllGetClassObject PRIVATE + DSoundHelp + GetDDSurfaceLocal + GetOLEThunkData + GetSurfaceFromDC + RegisterSpecialCase + ReleaseDDThreadLock + ;SetAppCompatData diff --git a/ddraw.py b/ddraw.py index fd8c5f5..2e17b06 100644 --- a/ddraw.py +++ b/ddraw.py @@ -163,7 +163,7 @@ DDCAPS_DX1 = Struct("DDCAPS_DX1", [ (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), - (DWORD, "dwRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), @@ -203,7 +203,7 @@ DDCAPS_DX3 = Struct("DDCAPS_DX3", [ (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), - (DWORD, "dwRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), @@ -217,15 +217,15 @@ DDCAPS_DX3 = Struct("DDCAPS_DX3", [ (DWORD, "dwSVBCaps"), (DWORD, "dwSVBCKeyCaps"), (DWORD, "dwSVBFXCaps"), - (DWORD, "dwSVBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"), (DWORD, "dwVSBCaps"), (DWORD, "dwVSBCKeyCaps"), (DWORD, "dwVSBFXCaps"), - (DWORD, "dwVSBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"), (DWORD, "dwSSBCaps"), (DWORD, "dwSSBCKeyCaps"), (DWORD, "dwSSBFXCaps"), - (DWORD, "dwSSBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"), (DWORD, "dwReserved4"), (DWORD, "dwReserved5"), (DWORD, "dwReserved6"), @@ -258,7 +258,7 @@ DDCAPS_DX5 = Struct("DDCAPS_DX5", [ (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), - (DWORD, "dwRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), @@ -272,15 +272,15 @@ DDCAPS_DX5 = Struct("DDCAPS_DX5", [ (DWORD, "dwSVBCaps"), (DWORD, "dwSVBCKeyCaps"), (DWORD, "dwSVBFXCaps"), - (DWORD, "dwSVBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"), (DWORD, "dwVSBCaps"), (DWORD, "dwVSBCKeyCaps"), (DWORD, "dwVSBFXCaps"), - (DWORD, "dwVSBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"), (DWORD, "dwSSBCaps"), (DWORD, "dwSSBCKeyCaps"), (DWORD, "dwSSBFXCaps"), - (DWORD, "dwSSBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"), (DWORD, "dwMaxVideoPorts"), (DWORD, "dwCurrVideoPorts"), (DWORD, "dwSVBCaps2"), @@ -288,7 +288,7 @@ DDCAPS_DX5 = Struct("DDCAPS_DX5", [ (DWORD, "dwNLVBCaps2"), (DWORD, "dwNLVBCKeyCaps"), (DWORD, "dwNLVBFXCaps"), - (DWORD, "dwNLVBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"), ]) LPDDCAPS_DX5 = Pointer(DDCAPS_DX5) @@ -318,7 +318,7 @@ DDCAPS_DX6 = Struct("DDCAPS_DX6", [ (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), - (DWORD, "dwRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsOldCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), @@ -332,15 +332,15 @@ DDCAPS_DX6 = Struct("DDCAPS_DX6", [ (DWORD, "dwSVBCaps"), (DWORD, "dwSVBCKeyCaps"), (DWORD, "dwSVBFXCaps"), - (DWORD, "dwSVBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"), (DWORD, "dwVSBCaps"), (DWORD, "dwVSBCKeyCaps"), (DWORD, "dwVSBFXCaps"), - (DWORD, "dwVSBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"), (DWORD, "dwSSBCaps"), (DWORD, "dwSSBCKeyCaps"), (DWORD, "dwSSBFXCaps"), - (DWORD, "dwSSBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"), (DWORD, "dwMaxVideoPorts"), (DWORD, "dwCurrVideoPorts"), (DWORD, "dwSVBCaps2"), @@ -348,7 +348,7 @@ DDCAPS_DX6 = Struct("DDCAPS_DX6", [ (DWORD, "dwNLVBCaps2"), (DWORD, "dwNLVBCKeyCaps"), (DWORD, "dwNLVBFXCaps"), - (DWORD, "dwNLVBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"), (DDSCAPS2, "ddsCaps"), ]) LPDDCAPS_DX6 = Pointer(DDCAPS_DX6) @@ -379,7 +379,7 @@ DDCAPS_DX7 = Struct("DDCAPS_DX7", [ (DWORD, "dwAlignBoundaryDest"), (DWORD, "dwAlignSizeDest"), (DWORD, "dwAlignStrideAlign"), - (DWORD, "dwRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwRops"), (DDSCAPS, "ddsOldCaps"), (DWORD, "dwMinOverlayStretch"), (DWORD, "dwMaxOverlayStretch"), @@ -393,15 +393,15 @@ DDCAPS_DX7 = Struct("DDCAPS_DX7", [ (DWORD, "dwSVBCaps"), (DWORD, "dwSVBCKeyCaps"), (DWORD, "dwSVBFXCaps"), - (DWORD, "dwSVBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwSVBRops"), (DWORD, "dwVSBCaps"), (DWORD, "dwVSBCKeyCaps"), (DWORD, "dwVSBFXCaps"), - (DWORD, "dwVSBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwVSBRops"), (DWORD, "dwSSBCaps"), (DWORD, "dwSSBCKeyCaps"), (DWORD, "dwSSBFXCaps"), - (DWORD, "dwSSBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwSSBRops"), (DWORD, "dwMaxVideoPorts"), (DWORD, "dwCurrVideoPorts"), (DWORD, "dwSVBCaps2"), @@ -409,7 +409,7 @@ DDCAPS_DX7 = Struct("DDCAPS_DX7", [ (DWORD, "dwNLVBCaps2"), (DWORD, "dwNLVBCKeyCaps"), (DWORD, "dwNLVBFXCaps"), - (DWORD, "dwNLVBRops[DD_ROP_SPACE]"), + (Array(DWORD, "DD_ROP_SPACE"), "dwNLVBRops"), (DDSCAPS2, "ddsCaps"), ]) LPDDCAPS_DX7 = Pointer(DDCAPS_DX7) @@ -479,9 +479,9 @@ DDBLTBATCH = Struct("DDBLTBATCH", [ LPDDBLTBATCH = Pointer(DDBLTBATCH) DDGAMMARAMP = Struct("DDGAMMARAMP", [ - (WORD, "red[256]"), - (WORD, "green[256]"), - (WORD, "blue[256]"), + (Array(WORD, "256"), "red"), + (Array(WORD, "256"), "green"), + (Array(WORD, "256"), "blue"), ]) LPDDGAMMARAMP = Pointer(DDGAMMARAMP) @@ -498,8 +498,8 @@ DDDEVICEIDENTIFIER = Struct("DDDEVICEIDENTIFIER", [ LPDDDEVICEIDENTIFIER = Pointer(DDDEVICEIDENTIFIER) DDDEVICEIDENTIFIER2 = Struct("DDDEVICEIDENTIFIER2", [ - (CString, "szDriver[MAX_DDDEVICEID_STRING]"), - (CString, "szDescription[MAX_DDDEVICEID_STRING]"), + (CString, "szDriver"), + (CString, "szDescription"), (LARGE_INTEGER, "liDriverVersion"), (DWORD, "dwVendorId"), (DWORD, "dwDeviceId"), @@ -1251,13 +1251,13 @@ IDirectDraw.methods += [ Method(HRESULT, "Compact", []), Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER), Pointer(IUnknown)]), Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown)]), - Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Pointer(LPDIRECTDRAWSURFACE) , Pointer(IUnknown)]), + Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), Pointer(IUnknown)]), Method(HRESULT, "DuplicateSurface", [LPDIRECTDRAWSURFACE, Pointer(LPDIRECTDRAWSURFACE)]), Method(HRESULT, "EnumDisplayModes", [DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK]), Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK]), Method(HRESULT, "FlipToGDISurface", []), Method(HRESULT, "GetCaps", [LPDDCAPS, LPDDCAPS]), - Method(HRESULT, "GetDisplayMode", [LPDDSURFACEDESC]), + Method(HRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]), Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD]), Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE)]), Method(HRESULT, "GetMonitorFrequency", [LPDWORD]), @@ -1274,13 +1274,13 @@ IDirectDraw2.methods += [ Method(HRESULT, "Compact", []), Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown)]), Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown)]), - Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Pointer(LPDIRECTDRAWSURFACE) , Pointer(IUnknown)]), + Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Out(Pointer(LPDIRECTDRAWSURFACE), "lplpDDSurface"), Pointer(IUnknown)]), Method(HRESULT, "DuplicateSurface", [LPDIRECTDRAWSURFACE, Pointer(LPDIRECTDRAWSURFACE)]), Method(HRESULT, "EnumDisplayModes", [DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK]), Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK]), Method(HRESULT, "FlipToGDISurface", []), Method(HRESULT, "GetCaps", [LPDDCAPS, LPDDCAPS]), - Method(HRESULT, "GetDisplayMode", [LPDDSURFACEDESC]), + Method(HRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC, "lpDDSurfaceDesc")]), Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD]), Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE)]), Method(HRESULT, "GetMonitorFrequency", [LPDWORD]), @@ -1298,13 +1298,13 @@ IDirectDraw4.methods += [ Method(HRESULT, "Compact", []), Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown)]), Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown)]), - Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Pointer(LPDIRECTDRAWSURFACE4) , Pointer(IUnknown)]), + Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Out(Pointer(LPDIRECTDRAWSURFACE4), "lplpDDSurface"), Pointer(IUnknown)]), Method(HRESULT, "DuplicateSurface", [LPDIRECTDRAWSURFACE4, Pointer(LPDIRECTDRAWSURFACE4)]), Method(HRESULT, "EnumDisplayModes", [DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2]), Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2]), Method(HRESULT, "FlipToGDISurface", []), Method(HRESULT, "GetCaps", [LPDDCAPS, LPDDCAPS]), - Method(HRESULT, "GetDisplayMode", [LPDDSURFACEDESC2]), + Method(HRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]), Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD]), Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE4)]), Method(HRESULT, "GetMonitorFrequency", [LPDWORD]), @@ -1319,20 +1319,20 @@ IDirectDraw4.methods += [ Method(HRESULT, "GetSurfaceFromDC", [HDC, Pointer(LPDIRECTDRAWSURFACE4)]), Method(HRESULT, "RestoreAllSurfaces", []), Method(HRESULT, "TestCooperativeLevel", []), - Method(HRESULT, "GetDeviceIdentifier", [LPDDDEVICEIDENTIFIER, DWORD]), + Method(HRESULT, "GetDeviceIdentifier", [Out(LPDDDEVICEIDENTIFIER, "lpDDDeviceIdentifier"), DWORD]), ] IDirectDraw7.methods += [ Method(HRESULT, "Compact", []), - Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown)]), + Method(HRESULT, "CreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (Pointer(IUnknown), "pUnkOuter")]), Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown)]), - Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Pointer(LPDIRECTDRAWSURFACE7) , Pointer(IUnknown)]), + Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Out(Pointer(LPDIRECTDRAWSURFACE7), "lplpDDSurface") , Pointer(IUnknown)]), Method(HRESULT, "DuplicateSurface", [LPDIRECTDRAWSURFACE7, Pointer(LPDIRECTDRAWSURFACE7)]), Method(HRESULT, "EnumDisplayModes", [DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2]), Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7]), Method(HRESULT, "FlipToGDISurface", []), Method(HRESULT, "GetCaps", [LPDDCAPS, LPDDCAPS]), - Method(HRESULT, "GetDisplayMode", [LPDDSURFACEDESC2]), + Method(HRESULT, "GetDisplayMode", [Out(LPDDSURFACEDESC2, "lpDDSurfaceDesc")]), Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD]), Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE7)]), Method(HRESULT, "GetMonitorFrequency", [LPDWORD]), @@ -1347,7 +1347,7 @@ IDirectDraw7.methods += [ Method(HRESULT, "GetSurfaceFromDC", [HDC, Pointer(LPDIRECTDRAWSURFACE7)]), Method(HRESULT, "RestoreAllSurfaces", []), Method(HRESULT, "TestCooperativeLevel", []), - Method(HRESULT, "GetDeviceIdentifier", [LPDDDEVICEIDENTIFIER2, DWORD]), + Method(HRESULT, "GetDeviceIdentifier", [Out(LPDDDEVICEIDENTIFIER2, "lpDDDeviceIdentifier"), DWORD]), Method(HRESULT, "StartModeTest", [LPSIZE, DWORD, DWORD]), Method(HRESULT, "EvaluateMode", [DWORD, Pointer(DWORD)]), ] @@ -1618,5 +1618,18 @@ ddraw.add_functions([ StdFunction(DWORD, "D3DParseUnknownCommand", [(LPVOID, "lpCmd"), Out(Pointer(LPVOID), "lpRetCmd")]), StdFunction(HRESULT, "DllCanUnloadNow", []), StdFunction(HRESULT, "DllGetClassObject", [(REFCLSID, "rclsid"), (REFIID, "riid"), Out(Pointer(OpaquePointer(Void)), "ppv")]), + + # XXX + StdFunction(HRESULT, "CompleteCreateSysmemSurface", [Int, Int]), + StdFunction(HRESULT, "GetSurfaceFromDC", [Int, Int, Int]), + StdFunction(HRESULT, "DDInternalLock", [Int, Int]), + StdFunction(HRESULT, "DDInternalUnlock", [Int]), + StdFunction(HRESULT, "DSoundHelp", [HWND, Int, Int]), + StdFunction(HRESULT, "GetDDSurfaceLocal", [Int, Int, Int]), + StdFunction(HANDLE, "GetOLEThunkData", [Int]), + StdFunction(HRESULT, "RegisterSpecialCase", [Int, Int, Int, Int]), + StdFunction(HRESULT, "DDGetAttachedSurfaceLcl", [Int, Int, Int]), + + # TODO: SetAppCompatData ]) diff --git a/trace.py b/trace.py index 6d8432b..368462a 100644 --- a/trace.py +++ b/trace.py @@ -271,7 +271,12 @@ unwrap_instance = Unwrapper().visit class Tracer: + def __init__(self): + self.api = None + def trace_api(self, api): + self.api = api + self.header(api) # Includes @@ -427,8 +432,15 @@ class Tracer: wrap_instance(method.type, '__result') print ' Trace::EndLeave();' if method.name == 'QueryInterface': - print ' if (*ppvObj == m_pInstance)' - print ' *ppvObj = this;' + print ' if (ppvObj && *ppvObj) {' + print ' if (*ppvObj == m_pInstance) {' + print ' *ppvObj = this;' + print ' }' + for iface in self.api.interfaces: + print ' else if (riid == IID_%s) {' % iface.name + print ' *ppvObj = new Wrap%s((%s *) *ppvObj);' % (iface.name, iface.name) + print ' }' + print ' }' if method.name == 'Release': assert method.type is not stdapi.Void print ' if (!__result)' diff --git a/winapi.py b/winapi.py index ee61982..449279f 100644 --- a/winapi.py +++ b/winapi.py @@ -76,14 +76,7 @@ GUID = Struct("GUID", [ (DWORD, "Data1"), (WORD, "Data2"), (WORD, "Data3"), - (BYTE, "Data4[0]"), - (BYTE, "Data4[1]"), - (BYTE, "Data4[2]"), - (BYTE, "Data4[3]"), - (BYTE, "Data4[4]"), - (BYTE, "Data4[5]"), - (BYTE, "Data4[6]"), - (BYTE, "Data4[7]"), + (Array(BYTE, "8"), "Data4"), ]) LPGUID = Pointer(GUID) @@ -150,8 +143,14 @@ HMODULE = Opaque("HMODULE") IUnknown = Interface("IUnknown") +HRESULT_com = FakeEnum(HRESULT, [ + "S_OK", + "E_NOINTERFACE", + "E_POINTER", +]) + IUnknown.methods = ( - Method(HRESULT, "QueryInterface", ((REFIID, "riid"), (Pointer(OpaquePointer(Void)), "ppvObj"))), + Method(HRESULT_com, "QueryInterface", ((REFIID, "riid"), Out(Pointer(OpaquePointer(Void)), "ppvObj"))), Method(ULONG, "AddRef", ()), Method(ULONG, "Release", ()), )