From e5c1b9dded19929d5f6f5febce549a194781469d Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Sat, 29 Jul 2000 21:54:58 +0000 Subject: [PATCH] Added CreateTypeLib,LHashValOfNameSys stubs. Check for correct struct magic before reading out of it. --- dlls/oleaut32/oleaut32.spec | 4 ++-- dlls/oleaut32/stubs.c | 40 ++++++++++++++++++++++++++++------- dlls/oleaut32/typelib.c | 42 ++++++++++++++++++++++++------------- 3 files changed, 62 insertions(+), 24 deletions(-) diff --git a/dlls/oleaut32/oleaut32.spec b/dlls/oleaut32/oleaut32.spec index b0e75d52e30..f0f9b50790e 100644 --- a/dlls/oleaut32/oleaut32.spec +++ b/dlls/oleaut32/oleaut32.spec @@ -133,12 +133,12 @@ import ole32.dll 148 stdcall SafeArrayPtrOfIndex(ptr ptr ptr) SafeArrayPtrOfIndex 149 stdcall SysStringByteLen(ptr) SysStringByteLen 150 stdcall SysAllocStringByteLen(ptr long) SysAllocStringByteLen -160 stub CreateTypeLib +160 stdcall CreateTypeLib(long wstr ptr) CreateTypeLib 161 stdcall LoadTypeLib (wstr ptr) LoadTypeLib 162 stdcall LoadRegTypeLib (ptr long long long ptr) LoadRegTypeLib 163 stdcall RegisterTypeLib(ptr str str) RegisterTypeLib 164 stdcall QueryPathOfRegTypeLib(ptr long long long ptr) QueryPathOfRegTypeLib -165 stub LHashValOfNameSys +165 stdcall LHashValOfNameSys(long long wstr) LHashValOfNameSys 166 stdcall LHashValOfNameSysA(long long str) LHashValOfNameSysA 170 stdcall OaBuildVersion() OaBuildVersion 171 stub ClearCustData diff --git a/dlls/oleaut32/stubs.c b/dlls/oleaut32/stubs.c index 1c2207cf563..af5d1366581 100644 --- a/dlls/oleaut32/stubs.c +++ b/dlls/oleaut32/stubs.c @@ -9,6 +9,7 @@ #include "windef.h" #include "debugtools.h" #include "olectl.h" +#include "heap.h" DEFAULT_DEBUG_CHANNEL(ole); @@ -33,14 +34,39 @@ HRESULT WINAPI OleCreatePropertyFrameIndirect( LPOCPFIPARAMS lpParams) /*********************************************************************** * OleCreatePropertyFrame */ -HRESULT WINAPI OleCreatePropertyFrame( HWND hwndOwner, UINT x, UINT y, - LPCOLESTR lpszCaption,ULONG cObjects, LPUNKNOWN* ppUnk, - ULONG cPages, LPCLSID pPageClsID, LCID lcid, - DWORD dwReserved, LPVOID pvReserved ) +HRESULT WINAPI OleCreatePropertyFrame( + HWND hwndOwner, UINT x, UINT y, LPCOLESTR lpszCaption,ULONG cObjects, + LPUNKNOWN* ppUnk, ULONG cPages, LPCLSID pPageClsID, LCID lcid, + DWORD dwReserved, LPVOID pvReserved ) { - FIXME("(%x,%d,%d,%p,%ld,%p,%ld,%p,%x,%ld,%p), not implemented (olepro32.dll)\n", - hwndOwner,x,y,lpszCaption,cObjects,ppUnk,cPages,pPageClsID, - (int)lcid,dwReserved,pvReserved); + FIXME("(%x,%d,%d,%s,%ld,%p,%ld,%p,%x,%ld,%p), not implemented (olepro32.dll)\n", + hwndOwner,x,y,debugstr_w(lpszCaption),cObjects,ppUnk,cPages, + pPageClsID, (int)lcid,dwReserved,pvReserved); return S_OK; } +/*********************************************************************** + * LHashValOfNameSysA + */ +ULONG WINAPI LHashValOfNameSysA( SYSKIND skind, LCID lcid, LPCSTR str) +{ + /* returns a 16 bit hashvalue (depending on skind and lcid) in the + * lowword and a unique id made from skind and lcid in bits 23-16 + */ + FIXME("(%d,%x,%s), stub, returning 0x424242!\n",skind,(int)lcid,debugstr_a(str)); + return 0x00424242; +} +/*********************************************************************** + * LHashValOfNameSys + */ +ULONG WINAPI LHashValOfNameSys( SYSKIND skind, LCID lcid, LPCOLESTR str) +{ + LPSTR strA; + ULONG res; + + if (!str) return 0; + strA = HEAP_strdupWtoA(GetProcessHeap(),0,str); + res = LHashValOfNameSysA(skind,lcid,strA); + HeapFree(GetProcessHeap(),0,strA); + return res; +} diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 8cdd9a2ecba..922abca8700 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -127,6 +127,19 @@ QueryPathOfRegTypeLib( return S_OK; } +/****************************************************************************** + * CreateTypeLib [OLEAUT32] creates a typelib + * + * RETURNS + * Success: S_OK + * Failure: Status + */ +HRESULT WINAPI CreateTypeLib( + SYSKIND syskind, LPCOLESTR szFile, /*ICreateTypeLib*/IUnknown ** ppctlib +) { + FIXME("(%d,%s,%p), stub!\n",syskind,debugstr_w(szFile),ppctlib); + return E_FAIL; +} /****************************************************************************** * LoadTypeLib [TYPELIB.3] Loads and registers a type library * NOTES @@ -296,15 +309,6 @@ DWORD WINAPI OaBuildVersion16(void) } } -/******************************************************************** - * LHashValOfNameSysA [OLEAUT32] - */ -HRESULT WINAPI LHashValOfNameSysA(SYSKIND sys, LCID lcid, LPSTR name) -{ - FIXME("%s\n", name); - return 0; -} - /* for better debugging info leave the static out for the time being */ #define static @@ -1129,7 +1133,12 @@ int TLB_ReadTypeLib(LPSTR pszFileName, ITypeLib2 **ppTypeLib) LPVOID pBase = LockResource(hGlobal); if (pBase) { - *ppTypeLib = ITypeLib2_Constructor(pBase); + /* try to load as incore resource */ + dwSignature = *((DWORD*) pBase); + if ( dwSignature == MSFT_SIGNATURE) + *ppTypeLib = ITypeLib2_Constructor(pBase); + else + FIXME("Header type magic 0x%08lx not supported.\n",dwSignature); } FreeResource( hGlobal ); } @@ -1177,15 +1186,19 @@ static ITypeLib2* ITypeLib2_Constructor(LPVOID pLib) /* read header */ TLB_Read((void*)&tlbHeader, sizeof(tlbHeader), &cx, 0); - TRACE("read header (0x%08x 0x%08x)\n",tlbHeader.magic1,tlbHeader.magic2 ); - + TRACE("header:\n"); + TRACE("\tmagic1=0x%08x ,magic2=0x%08x\n",tlbHeader.magic1,tlbHeader.magic2 ); + if (memcmp(&tlbHeader.magic1,TLBMAGIC2,4)) { + FIXME("Header type magic 0x%08x not supported.\n",tlbHeader.magic1); + return NULL; + } /* there is a small number of information here until the next important * part: * the segment directory . Try to calculate the amount of data */ - lPSegDir = sizeof(tlbHeader) + (tlbHeader.nrtypeinfos)*4 + (tlbHeader.varflags & HELPDLLFLAG? 4 :0); + lPSegDir = sizeof(tlbHeader) + (tlbHeader.nrtypeinfos)*4 + ((tlbHeader.varflags & HELPDLLFLAG)? 4 :0); /* now read the segment directory */ - TRACE("read segment directory\n"); + TRACE("read segment directory (at %ld)\n",lPSegDir); TLB_Read((void*)&tlbSegDir, sizeof(tlbSegDir), &cx, lPSegDir); cx.pTblDir = &tlbSegDir; @@ -2932,4 +2945,3 @@ static ICOM_VTABLE(ITypeInfo2) tinfvt = ITypeInfo2_fnGetAllVarCustData, ITypeInfo2_fnGetAllImplTypeCustData, }; -