WORD = Alias("WORD", UInt16)
DWORD = Alias("DWORD", UInt32)
+UCHAR = Alias("UCHAR", UChar)
WCHAR = Alias("WCHAR", Short)
BOOL = Enum("BOOL", [
LPBOOL = Pointer(BOOL)
LPSTR = CString
-LPCSTR = Const(CString)
+LPCSTR = ConstCString
LPWSTR = WString
-LPCWSTR = Const(WString)
+LPCWSTR = ConstWString
LARGE_INTEGER = Struct("LARGE_INTEGER", [
(LONGLONG, 'QuadPart'),
SIZE_T = Alias("SIZE_T", SizeT)
VOID = Void
-PVOID = Opaque("PVOID")
+PVOID = OpaquePointer(VOID)
LPVOID = PVOID
+LPCVOID = OpaquePointer(Const(VOID))
def DECLARE_HANDLE(expr):
return Handle(expr, IntPointer(expr))
# http://msdn.microsoft.com/en-us/library/ff485842.aspx
# http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381.aspx
-HRESULT = Enum("HRESULT", [
- "S_OK", # 0x0
- "S_FALSE", # 0x1
- "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
-])
+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, "QueryInterface", ((REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppvObj"))),
- Method(ULONG, "AddRef", ()),
- Method(ULONG, "Release", ()),
+ StdMethod(HRESULT, "QueryInterface", ((REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppvObj"))),
+ StdMethod(ULONG, "AddRef", (), sideeffects=False),
+ StdMethod(ULONG, "Release", ()),
)