X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=winapi.py;h=ee9c91f94b0ecbcc96d925eecd3d44eee6f3e9f0;hb=ce04047159832b49f55618d76478ef264cbee462;hp=5345a0dc5bd62ec527298d7cdf371051a06d1fa5;hpb=f2efceaae999b2c5b9f2a6561915f9765e22dcc7;p=apitrace diff --git a/winapi.py b/winapi.py index 5345a0d..ee9c91f 100644 --- a/winapi.py +++ b/winapi.py @@ -36,20 +36,20 @@ ULONG = Alias("ULONG", ULong) LONGLONG = Alias("LONGLONG", LongLong) FLOAT = Alias("FLOAT", Float) -INT32 = Literal("INT32", "UInt") +INT32 = Literal("INT32", "SInt") UINT32 = Literal("UINT32", "UInt") BYTE = Literal("BYTE", "UInt", base=16) WORD = Literal("WORD", "UInt", base=16) DWORD = Literal("DWORD", "UInt", base=16) + BOOL = Alias("BOOL", Bool) LPLONG = Pointer(LONG) LPWORD = Pointer(WORD) LPDWORD = Pointer(DWORD) LPBOOL = Pointer(BOOL) -LPSIZE = LPDWORD LPSTR = CString LPCSTR = Const(CString) @@ -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) @@ -109,6 +102,12 @@ POINT = Struct("POINT", ( )) LPPOINT = Pointer(POINT) +SIZE = Struct("SIZE", ( + (LONG, "cx"), + (LONG, "cy"), +)) +LPSIZE = Pointer(SIZE) + RECT = Struct("RECT", ( (LONG, "left"), (LONG, "top"), @@ -144,80 +143,16 @@ 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", ()), ) -class DllFunction(Function): - - def get_true_pointer(self): - ptype = self.pointer_type() - pvalue = self.pointer_value() - print ' if(!g_hDll) {' - print ' g_hDll = LoadLibrary(g_szDll);' - print ' if(!g_hDll)' - self.fail_impl() - print ' }' - print ' if(!%s) {' % (pvalue,) - print ' %s = (%s)GetProcAddress(g_hDll, "%s");' % (pvalue, ptype, self.name) - print ' if(!%s)' % (pvalue,) - self.fail_impl() - print ' }' - - -class Dll: - - def __init__(self, name): - self.name = name - self.functions = [] - if self not in towrap: - towrap.append(self) - - def wrap_name(self): - return "Wrap" + self.name - - def wrap_pre_decl(self): - pass - - def wrap_decl(self): - print 'static HINSTANCE g_hDll = NULL;' - print 'static TCHAR g_szDll[MAX_PATH] = {0};' - print - print 'BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);' - print - for function in self.functions: - function.wrap_decl() - print - - def wrap_impl(self): - print r'BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {' - print r' switch(fdwReason) {' - print r' case DLL_PROCESS_ATTACH:' - print r' if(!GetSystemDirectory(g_szDll, MAX_PATH))' - print r' return FALSE;' - print r' _tcscat(g_szDll, TEXT("\\%s.dll"));' % self.name - print r' Trace::Open("%s");' % self.name - print r' case DLL_THREAD_ATTACH:' - print r' return TRUE;' - print r' case DLL_THREAD_DETACH:' - print r' return TRUE;' - print r' case DLL_PROCESS_DETACH:' - print r' Trace::Close();' - print r' if(g_hDll) {' - print r' FreeLibrary(g_hDll);' - print r' g_hDll = NULL;' - print r' }' - print r' return TRUE;' - print r' }' - print r' (void)hinstDLL;' - print r' (void)lpvReserved;' - print r' return TRUE;' - print r'}' - print - for function in self.functions: - function.wrap_impl() - print -