From: Jacek Caban Subject: [PATCH 1/3] atl100: Added AtlWinModuleExtractCreateWndData implementation Message-Id: <50D1BE49.10207@codeweavers.com> Date: Wed, 19 Dec 2012 14:16:57 +0100 --- dlls/atl100/atl.c | 28 ++++++++++++++++++++++++++++ dlls/atl100/atl100.spec | 2 +- include/atlbase.h | 1 + 3 files changed, 30 insertions(+), 1 deletions(-) diff --git a/dlls/atl100/atl.c b/dlls/atl100/atl.c index bd3fbf1..570fe5c 100644 --- a/dlls/atl100/atl.c +++ b/dlls/atl100/atl.c @@ -319,6 +319,34 @@ void WINAPI AtlWinModuleAddCreateWndData(_ATL_WIN_MODULE *pM, _AtlCreateWndData } /*********************************************************************** + * AtlWinModuleExtractCreateWndData [atl100.44] + */ +void* WINAPI AtlWinModuleExtractCreateWndData(_ATL_WIN_MODULE *winmod) +{ + _AtlCreateWndData *iter, *prev = NULL; + DWORD thread_id; + + TRACE("(%p)\n", winmod); + + thread_id = GetCurrentThreadId(); + + EnterCriticalSection(&winmod->m_csWindowCreate); + + for(iter = winmod->m_pCreateWndList; iter && iter->m_dwThreadID != thread_id; iter = iter->m_pNext) + prev = iter; + if(iter) { + if(prev) + prev->m_pNext = iter->m_pNext; + else + winmod->m_pCreateWndList = iter->m_pNext; + } + + LeaveCriticalSection(&winmod->m_csWindowCreate); + + return iter ? iter->m_pThis : NULL; +} + +/*********************************************************************** * AtlComModuleGetClassObject [atl100.15] */ HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE *pm, REFCLSID rclsid, REFIID riid, void **ppv) diff --git a/dlls/atl100/atl100.spec b/dlls/atl100/atl100.spec index 11cac7d..0c27070 100644 --- a/dlls/atl100/atl100.spec +++ b/dlls/atl100/atl100.spec @@ -27,7 +27,7 @@ 41 stdcall AtlAxAttachControl(ptr ptr ptr) 42 stdcall AtlAxWinInit() 43 stdcall AtlWinModuleAddCreateWndData(ptr ptr ptr) -44 stub AtlWinModuleExtractCreateWndData +44 stdcall AtlWinModuleExtractCreateWndData(ptr) 45 stub AtlWinModuleRegisterWndClassInfoW 46 stub AtlWinModuleRegisterWndClassInfoA 47 stdcall AtlAxGetControl(long ptr) diff --git a/include/atlbase.h b/include/atlbase.h index 95b1f2a..831150d 100644 --- a/include/atlbase.h +++ b/include/atlbase.h @@ -223,6 +223,7 @@ HRESULT WINAPI AtlMarshalPtrInProc(IUnknown *pUnk, const IID *iid, IStream **ppS void WINAPI AtlModuleAddCreateWndData(_ATL_MODULEW *pM, _AtlCreateWndData *pData, void* pvObject); HRESULT WINAPI AtlWinModuleInit(_ATL_WIN_MODULE*); void WINAPI AtlWinModuleAddCreateWndData(_ATL_WIN_MODULE*,_AtlCreateWndData*,void*); +void* WINAPI AtlWinModuleExtractCreateWndData(_ATL_WIN_MODULE*); HRESULT WINAPI AtlModuleAddTermFunc(_ATL_MODULE *pM, _ATL_TERMFUNC *pFunc, DWORD_PTR dw); void WINAPI AtlCallTermFunc(_ATL_MODULE*); void* WINAPI AtlModuleExtractCreateWndData(_ATL_MODULEW *pM);