Andrey Turkin : atl: Implement AtlModuleAddCreateWndData and AtlModuleExtractCreateWndData.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Nov 2 15:47:58 CST 2006


Module: wine
Branch: master
Commit: b7ec4de7c6656f87e0a48e17b4fa38915ab62bb1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b7ec4de7c6656f87e0a48e17b4fa38915ab62bb1

Author: Andrey Turkin <pancha at 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);




More information about the wine-cvs mailing list