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