X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=specs%2Fwinapi.py;h=4436c6ddb971d494329db0e1a2dd1f9d7b798407;hb=a936afc3ebb349c3aec8b5a595706f3c9749ad37;hp=e5df0f9d3f81e7800b1a9a5ff2729a0ecb1ea743;hpb=87b51839c67c68b1c9e00a0dd754a69ca6837ca0;p=apitrace diff --git a/specs/winapi.py b/specs/winapi.py index e5df0f9..4436c6d 100644 --- a/specs/winapi.py +++ b/specs/winapi.py @@ -25,8 +25,10 @@ """Win32 API type description.""" + from stdapi import * + SHORT = Alias("SHORT", Short) USHORT = Alias("USHORT", UShort) INT = Alias("INT", Int) @@ -49,9 +51,13 @@ BYTE = Alias("BYTE", UInt8) WORD = Alias("WORD", UInt16) DWORD = Alias("DWORD", UInt32) +UCHAR = Alias("UCHAR", UChar) WCHAR = Alias("WCHAR", Short) -BOOL = Alias("BOOL", Bool) +BOOL = Enum("BOOL", [ + "FALSE", + "TRUE", +]) LPLONG = Pointer(LONG) LPWORD = Pointer(WORD) @@ -59,9 +65,9 @@ LPDWORD = Pointer(DWORD) LPBOOL = Pointer(BOOL) LPSTR = CString -LPCSTR = Const(CString) +LPCSTR = ConstCString LPWSTR = WString -LPCWSTR = Const(WString) +LPCWSTR = ConstWString LARGE_INTEGER = Struct("LARGE_INTEGER", [ (LONGLONG, 'QuadPart'), @@ -69,11 +75,10 @@ LARGE_INTEGER = Struct("LARGE_INTEGER", [ SIZE_T = Alias("SIZE_T", SizeT) -HRESULT = Alias("HRESULT", Int) - VOID = Void -PVOID = Opaque("PVOID") +PVOID = OpaquePointer(VOID) LPVOID = PVOID +LPCVOID = OpaquePointer(Const(VOID)) def DECLARE_HANDLE(expr): return Handle(expr, IntPointer(expr)) @@ -147,9 +152,7 @@ RGNDATA = Struct("RGNDATA", [ ]) LPRGNDATA = Pointer(RGNDATA) -HMODULE = DECLARE_HANDLE("HMODULE") - -IUnknown = Interface("IUnknown") +HMODULE = IntPointer("HMODULE") FILETIME = Struct("FILETIME", [ (DWORD, "dwLowDateTime"), @@ -175,16 +178,36 @@ LOGFONTW = Struct("LOGFONTW", [ (WString, "lfFaceName"), ]) -HRESULT_com = FakeEnum(HRESULT, [ - "S_OK", - "E_NOINTERFACE", - "E_POINTER", -]) + +# http://msdn.microsoft.com/en-us/library/ff485842.aspx +# http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381.aspx +def MAKE_HRESULT(errors, ok = "S_OK", false = "S_FALSE"): + values = [ok, false] + values.extend(errors) + values.extend([ + "E_PENDING", # 0x8000000A + "E_NOTIMPL", # 0x80004001 + "E_NOINTERFACE", # 0x80004002 + "E_POINTER", # 0x80004003 + "E_ABORT", # 0x80004004 + "E_FAIL", # 0x80004005 + "E_UNEXPECTED", # 0x8000FFFF + "E_ACCESSDENIED", # 0x80070005 + "E_HANDLE", # 0x80070006 + "E_OUTOFMEMORY", # 0x8007000E + "E_INVALIDARG", # 0x80070057 + ]) + return Enum("HRESULT", values) + +HRESULT = MAKE_HRESULT([]) + + +IUnknown = Interface("IUnknown") IUnknown.methods = ( - Method(HRESULT_com, "QueryInterface", ((REFIID, "riid"), Out(Pointer(OpaquePointer(Void)), "ppvObj"))), - Method(ULONG, "AddRef", ()), - Method(ULONG, "Release", ()), + StdMethod(HRESULT, "QueryInterface", ((REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppvObj"))), + StdMethod(ULONG, "AddRef", ()), + StdMethod(ULONG, "Release", ()), )