atl: Implement AtlModuleAddCreateWndData and AtlModuleExtractCreateWndData

Andrey Turkin pancha at mail.nnov.ru
Mon Oct 30 09:55:05 CST 2006


Hi, this patch implements AtlModuleAddCreateWndData and 
AtlModuleExtractCreateWndData functions. There is little info info about 
these functions so I've used some tests to determine what they do. Hope 
I've got it right.

ChangeLog:
  Implement AtlModuleAddCreateWndData and AtlModuleExtractCreateWndData
-------------- next part --------------
>From 4a537bdda8fccfe43098c18fafd127a97744a252 Mon Sep 17 00:00:00 2001
From: TEA <tea at localhost.localdomain>
Date: Mon, 30 Oct 2006 17:08:16 +0300
Subject: [PATCH] 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 f7f46fe..bcabe2e 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 2fdf901..b47f1dd 100644
--- a/dlls/atl/atl_main.c
+++ b/dlls/atl/atl_main.c
@@ -421,3 +421,42 @@ ATOM WINAPI AtlModuleRegisterWndClassInf
     TRACE("returning 0x%04x\n", atom);
     return atom;
 }
+
+/***********************************************************************
+ *           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);
-- 
1.4.2.4



More information about the wine-patches mailing list