Module: wine Branch: master Commit: 177d7aac3d3f400cf32aee8a5b175b3674b77db0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=177d7aac3d3f400cf32aee8a5b...
Author: Piotr Caban piotr.caban@gmail.com Date: Thu Feb 25 15:07:13 2010 +0100
oleaut32: Added ITypeLib2_GetLibAttr implementation.
---
dlls/oleaut32/tests/typelib.c | 16 ++++++++++++++++ dlls/oleaut32/typelib2.c | 27 +++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c index aaaaceb..1582bb2 100644 --- a/dlls/oleaut32/tests/typelib.c +++ b/dlls/oleaut32/tests/typelib.c @@ -992,6 +992,7 @@ static void test_CreateTypeLib(void) { PARAMDESCEX paramdescex; TYPEDESC typedesc1, typedesc2; TYPEATTR *typeattr; + TLIBATTR *libattr; HREFTYPE hreftype; int impltypeflags; HRESULT hres; @@ -1010,6 +1011,21 @@ static void test_CreateTypeLib(void) { hres = CreateTypeLib2(SYS_WIN32, filenameW, &createtl); ok(hres == S_OK, "got %08x\n", hres);
+ hres = ICreateTypeLib_QueryInterface(createtl, &IID_ITypeLib, (void**)&tl); + ok(hres == S_OK, "got %08x\n", hres); + + hres = ITypeLib_GetLibAttr(tl, &libattr); + ok(hres == S_OK, "got %08x\n", hres); + + ok(libattr->syskind == SYS_WIN32, "syskind = %d\n", libattr->syskind); + ok(libattr->wMajorVerNum == 0, "wMajorVer = %d\n", libattr->wMajorVerNum); + ok(libattr->wMinorVerNum == 0, "wMinorVerNum = %d\n", libattr->wMinorVerNum); + ok(libattr->wLibFlags == 0, "wLibFlags = %d\n", libattr->wLibFlags); + + ITypeLib_ReleaseTLibAttr(tl, libattr); + + ITypeLib_Release(tl); + hres = ICreateTypeLib_CreateTypeInfo(createtl, interface1W, TKIND_INTERFACE, &createti); ok(hres == S_OK, "got %08x\n", hres);
diff --git a/dlls/oleaut32/typelib2.c b/dlls/oleaut32/typelib2.c index 03db7b5..0f7f18b 100644 --- a/dlls/oleaut32/typelib2.c +++ b/dlls/oleaut32/typelib2.c @@ -4260,9 +4260,28 @@ static HRESULT WINAPI ITypeLib2_fnGetLibAttr( { ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
- FIXME("(%p,%p), stub!\n", This, ppTLibAttr); + TRACE("(%p,%p)\n", This, ppTLibAttr);
- return E_OUTOFMEMORY; + if(!ppTLibAttr) + return E_INVALIDARG; + + *ppTLibAttr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(TLIBATTR)); + if(!*ppTLibAttr) + return E_OUTOFMEMORY; + + if(This->typelib_header.posguid != -1) { + MSFT_GuidEntry *guid; + + guid = (MSFT_GuidEntry*)&This->typelib_segment_data[MSFT_SEG_GUID][This->typelib_header.posguid]; + (*ppTLibAttr)->guid = guid->guid; + } + + (*ppTLibAttr)->lcid = This->typelib_header.lcid; + (*ppTLibAttr)->syskind = This->typelib_header.varflags&0x3; + (*ppTLibAttr)->wMajorVerNum = This->typelib_header.version&0xffff; + (*ppTLibAttr)->wMinorVerNum = This->typelib_header.version>>16; + (*ppTLibAttr)->wLibFlags = This->typelib_header.flags; + return S_OK; }
/****************************************************************************** @@ -4366,9 +4385,9 @@ static void WINAPI ITypeLib2_fnReleaseTLibAttr( ITypeLib2 * iface, TLIBATTR* pTLibAttr) { - ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface); + TRACE("(%p,%p)\n", iface, pTLibAttr);
- FIXME("(%p,%p), stub!\n", This, pTLibAttr); + HeapFree(GetProcessHeap(), 0, pTLibAttr); }
/******************************************************************************