Module: wine Branch: master Commit: b7ec4de7c6656f87e0a48e17b4fa38915ab62bb1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b7ec4de7c6656f87e0a48e17b4...
Author: Andrey Turkin pancha@mail.nnov.ru Date: Mon Oct 30 18:55:05 2006 +0300
atl: Implement AtlModuleAddCreateWndData and AtlModuleExtractCreateWndData.
---
dlls/atl/atl.spec | 4 ++-- dlls/atl/atl_main.c | 39 +++++++++++++++++++++++++++++++++++++++ dlls/atl/atlbase.h | 2 ++ 3 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/dlls/atl/atl.spec b/dlls/atl/atl.spec index c8f0199..a91cc84 100644 --- a/dlls/atl/atl.spec +++ b/dlls/atl/atl.spec @@ -34,8 +34,8 @@ 40 stub AtlAxCreateControlEx 41 stub AtlAxAttachControl 42 stdcall AtlAxWinInit() -43 stub AtlModuleAddCreateWndData -44 stub AtlModuleExtractCreateWndData +43 stdcall AtlModuleAddCreateWndData(ptr ptr ptr) +44 stdcall AtlModuleExtractCreateWndData(ptr) 45 stdcall AtlModuleRegisterWndClassInfoW(ptr ptr ptr) 46 stub AtlModuleRegisterWndClassInfoA 47 stub AtlAxGetControl diff --git a/dlls/atl/atl_main.c b/dlls/atl/atl_main.c index 6c72289..0d2c67e 100644 --- a/dlls/atl/atl_main.c +++ b/dlls/atl/atl_main.c @@ -423,3 +423,42 @@ void WINAPI AtlPixelToHiMetric(const SIZ lpHiMetric->cy = 100 * lpPix->cy / GetDeviceCaps( dc, LOGPIXELSY ); ReleaseDC( NULL, dc ); } + +/*********************************************************************** + * AtlModuleAddCreateWndData [ATL.@] + */ +void WINAPI AtlModuleAddCreateWndData(_ATL_MODULEW *pM, _AtlCreateWndData *pData, LPVOID pvObject) +{ + TRACE("(%p, %p, %p)\n", pM, pData, pvObject); + + pData->m_pThis = pvObject; + pData->m_dwThreadID = GetCurrentThreadId(); + pData->m_pNext = pM->m_pCreateWndList; + pM->m_pCreateWndList = pData; +} + +/*********************************************************************** + * AtlModuleExtractCreateWndData [ATL.@] + * + * 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 + * + */ +LPVOID WINAPI AtlModuleExtractCreateWndData(_ATL_MODULEW *pM) +{ + _AtlCreateWndData **ppData; + + TRACE("(%p)\n", pM); + + for(ppData = &pM->m_pCreateWndList; *ppData!=NULL; ppData = &(*ppData)->m_pNext) + { + if ((*ppData)->m_dwThreadID == GetCurrentThreadId()) + { + _AtlCreateWndData *pData = *ppData; + *ppData = pData->m_pNext; + return pData->m_pThis; + } + } + return NULL; +} diff --git a/dlls/atl/atlbase.h b/dlls/atl/atlbase.h index 9be245f..218db5e 100644 --- a/dlls/atl/atlbase.h +++ b/dlls/atl/atlbase.h @@ -146,7 +146,9 @@ HRESULT WINAPI AtlAxCreateControl(LPCOLE HRESULT WINAPI AtlFreeMarshalStream(IStream *pStream); HRESULT WINAPI AtlInternalQueryInterface(LPVOID pThis, const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, LPVOID* ppvObject); HRESULT WINAPI AtlMarshalPtrInProc(IUnknown *pUnk, const IID *iid, IStream **ppStream); +void WINAPI AtlModuleAddCreateWndData(_ATL_MODULEW *pM, _AtlCreateWndData *pData, LPVOID pvObject); HRESULT WINAPI AtlModuleAddTermFunc(_ATL_MODULEW *pM, _ATL_TERMFUNC *pFunc, DWORD_PTR dw); +LPVOID WINAPI AtlModuleExtractCreateWndData(_ATL_MODULEW *pM); HRESULT WINAPI AtlModuleInit(_ATL_MODULEA* pM, _ATL_OBJMAP_ENTRYA* p, HINSTANCE h); HRESULT WINAPI AtlModuleRegisterClassObjects(_ATL_MODULEA* pM, DWORD dwClsContext, DWORD dwFlags); HRESULT WINAPI AtlModuleRegisterServer(_ATL_MODULEW* pM, BOOL bRegTypeLib, const CLSID* pCLSID);