Module: wine Branch: master Commit: 8141b99d119cbfb3e0b052dccfdc329b28b1be78 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8141b99d119cbfb3e0b052dccf...
Author: Andrey Turkin pancha@mail.nnov.ru Date: Sat Nov 11 00:06:53 2006 +0300
atl: Implement AtlModuleLoadTypeLib.
---
dlls/atl/atl_main.c | 33 +++++++++++++++++++++++++-------- 1 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/dlls/atl/atl_main.c b/dlls/atl/atl_main.c index e1cc058..1fac5b1 100644 --- a/dlls/atl/atl_main.c +++ b/dlls/atl/atl_main.c @@ -68,7 +68,7 @@ HRESULT WINAPI AtlModuleInit(_ATL_MODULE FIXME("Unknown structure version (size %i)\n",size); return E_INVALIDARG; } - + memset(pM,0,pM->cbSize); pM->cbSize = size; pM->m_hInst = h; @@ -97,11 +97,28 @@ HRESULT WINAPI AtlModuleInit(_ATL_MODULE return S_OK; }
-HRESULT WINAPI AtlModuleLoadTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex, +HRESULT WINAPI AtlModuleLoadTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex, BSTR *pbstrPath, ITypeLib **ppTypeLib) { - FIXME("(%p, %s, %p, %p): stub\n", pM, debugstr_w(lpszIndex), pbstrPath, ppTypeLib); - return E_FAIL; + HRESULT hRes; + OLECHAR path[MAX_PATH+8]; /* leave some space for index */ + + TRACE("(%p, %s, %p, %p)\n", pM, debugstr_w(lpszIndex), pbstrPath, ppTypeLib); + + if (!pM) + return E_INVALIDARG; + + GetModuleFileNameW(pM->m_hInstTypeLib, path, MAX_PATH); + if (lpszIndex) + lstrcatW(path, lpszIndex); + + hRes = LoadTypeLib(path, ppTypeLib); + if (FAILED(hRes)) + return hRes; + + *pbstrPath = SysAllocString(path); + + return S_OK; }
HRESULT WINAPI AtlModuleTerm(_ATL_MODULEW* pM) @@ -238,7 +255,7 @@ HRESULT WINAPI AtlInternalQueryInterface * AtlModuleRegisterServer [ATL.@] * */ -HRESULT WINAPI AtlModuleRegisterServer(_ATL_MODULEW* pM, BOOL bRegTypeLib, const CLSID* clsid) +HRESULT WINAPI AtlModuleRegisterServer(_ATL_MODULEW* pM, BOOL bRegTypeLib, const CLSID* clsid) { FIXME("%p %d %s\n", pM, bRegTypeLib, debugstr_guid(clsid)); return S_OK; @@ -362,7 +379,7 @@ HRESULT WINAPI AtlModuleUnregisterServer * * If the class name is NULL then it a class with a name of "ATLxxxxxxxx" is * registered, where the x's represent an unique value. - * + * */ ATOM WINAPI AtlModuleRegisterWndClassInfoW(_ATL_MODULEW *pm, _ATL_WNDCLASSINFOW *wci, WNDPROC *pProc) { @@ -432,8 +449,8 @@ void WINAPI AtlModuleAddCreateWndData(_A * * NOTE: I failed to find any good description of this function. * Tests show that this function extracts one of _AtlCreateWndData - * records from the current thread from a list - * + * records from the current thread from a list + * */ LPVOID WINAPI AtlModuleExtractCreateWndData(_ATL_MODULEW *pM) {