First few ATL functions
Aric Stewart
aric at codeweavers.com
Fri Jul 2 08:42:26 CDT 2004
First implementation of the Advanced Template Library, with just a few
function implemented
-------------- next part --------------
Index: configure.ac
===================================================================
RCS file: /home/wine/wine/configure.ac,v
retrieving revision 1.283
diff -u -w -r1.283 configure.ac
--- configure.ac 22 Jun 2004 02:42:05 -0000 1.283
+++ configure.ac 2 Jul 2004 13:41:12 -0000
@@ -1506,6 +1506,7 @@
dlls/advapi32/Makefile
dlls/advapi32/tests/Makefile
dlls/amstream/Makefile
+dlls/atl/Makefile
dlls/avicap32/Makefile
dlls/avifil32/Makefile
dlls/cabinet/Makefile
Index: dlls/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/Makefile.in,v
retrieving revision 1.219
diff -u -w -r1.219 Makefile.in
--- dlls/Makefile.in 3 Jun 2004 00:03:23 -0000 1.219
+++ dlls/Makefile.in 2 Jul 2004 13:41:13 -0000
@@ -18,6 +18,7 @@
BASEDIRS = \
advapi32 \
amstream \
+ atl \
avicap32 \
avifil32 \
cabinet \
@@ -237,6 +238,7 @@
@WIN16_FILES@ \
advapi32.dll.so \
amstream.dll.so \
+ atl.dll.so \
avicap32.dll.so \
avifil32.dll.so \
cabinet.dll.so \
@@ -400,6 +402,9 @@
amstream.dll.so: amstream/amstream.dll.so
$(RM) $@ && $(LN_S) amstream/amstream.dll.so $@
+atl.dll.so: atl/atl.dll.so
+ $(RM) $@ && $(LN_S) atl/atl.dll.so $@
+
avicap32.dll.so: avicap32/avicap32.dll.so
$(RM) $@ && $(LN_S) avicap32/avicap32.dll.so $@
@@ -1084,6 +1089,11 @@
libamstream.a: amstream/amstream.spec.def
$(DLLTOOL) -k -l $@ -d amstream/amstream.spec.def
+libatl.def: atl/atl.spec.def
+ $(RM) $@ && $(LN_S) atl/atl.spec.def $@
+libatl.a: atl/atl.spec.def
+ $(DLLTOOL) -k -l $@ -d atl/atl.spec.def
+
libavicap32.def: avicap32/avicap32.spec.def
$(RM) $@ && $(LN_S) avicap32/avicap32.spec.def $@
libavicap32.a: avicap32/avicap32.spec.def
@@ -1681,6 +1691,7 @@
advapi32/advapi32.spec.def: $(WINEBUILD)
amstream/amstream.spec.def: $(WINEBUILD)
+atl/atl.spec.def: $(WINEBUILD)
avicap32/avicap32.spec.def: $(WINEBUILD)
avifil32/avifil32.spec.def: $(WINEBUILD)
cabinet/cabinet.spec.def: $(WINEBUILD)
@@ -1808,6 +1819,7 @@
advapi32/advapi32.dll.so: advapi32
amstream/amstream.dll.so: amstream
+atl/atl.dll.so: atl
avicap32/avicap32.dll.so: avicap32
avifil32/avifil32.dll.so: avifil32
cabinet/cabinet.dll.so: cabinet
--- /dev/null Thu Aug 30 15:30:55 2001
+++ dlls/atl/atlbase.h Fri Jul 2 08:33:42 2004
@@ -0,0 +1,138 @@
+/*
+ * Implementation of the Active Template Library (atl.dll)
+ *
+ * Copyright 2004 Aric Stewart for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#define ATLAPI HRESULT __stdcall
+
+typedef HRESULT (WINAPI _ATL_CREATORFUNC)(void* pv, REFIID riid, LPVOID* ppv);
+typedef HRESULT (WINAPI _ATL_CREATORARGFUNC)(void* pv, REFIID riid, LPVOID* ppv, DWORD dw);
+typedef HRESULT (WINAPI _ATL_MODULEFUNC)(DWORD dw);
+typedef LPCSTR (WINAPI _ATL_DESCRIPTIONFUNCA)();
+typedef LPCWSTR (WINAPI _ATL_DESCRIPTIONFUNCW)();
+typedef const struct _ATL_CATMAP_ENTRY* (_ATL_CATMAPFUNC)();
+typedef void (__stdcall _ATL_TERMFUNC)(DWORD dw);
+
+typedef struct _ATL_OBJMAP_ENTRYA_TAG
+{
+ const CLSID* pclsid;
+ HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+ _ATL_CREATORFUNC* pfnGetClassObject;
+ _ATL_CREATORFUNC* pfnCreateInstance;
+ IUnknown* pCF;
+ DWORD dwRegister;
+ _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription;
+ _ATL_CATMAPFUNC* pfnGetCategoryMap;
+ void (WINAPI *pfnObjectMain)(BOOL bStarting);
+}_ATL_OBJMAP_ENTRYA;
+
+typedef struct _ATL_OBJMAP_ENTRYW_TAG
+{
+ const CLSID* pclsid;
+ HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+ _ATL_CREATORFUNC* pfnGetClassObject;
+ _ATL_CREATORFUNC* pfnCreateInstance;
+ IUnknown* pCF;
+ DWORD dwRegister;
+ _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription;
+ _ATL_CATMAPFUNC* pfnGetCategoryMap;
+ void (WINAPI *pfnObjectMain)(BOOL bStarting);
+} _ATL_OBJMAP_ENTRYW;
+
+
+typedef struct _ATL_TERMFUNC_ELEM_TAG
+{
+ _ATL_TERMFUNC* pFunc;
+ DWORD dw;
+ struct _ATL_TERMFUNC_ELEM_TAG* pNext;
+} _ATL_TERMFUNC_ELEM;
+
+typedef struct _AtlCreateWndData_TAG
+{
+ void* m_pThis;
+ DWORD m_dwThreadID;
+ struct _AtlCreateWndData_TAG* m_pNext;
+} _AtlCreateWndData;
+
+typedef struct _ATL_MODULEA_TAG
+{
+ UINT cbSize;
+ HINSTANCE m_hInst;
+ HINSTANCE m_hInstResource;
+ HINSTANCE m_hInstTypeLib;
+ _ATL_OBJMAP_ENTRYA* m_pObjMap;
+ LONG m_nLockCnt;
+ HANDLE m_hHeap;
+ union
+ {
+ CRITICAL_SECTION m_csTypeInfoHolder;
+ CRITICAL_SECTION m_csStaticDataInit;
+ };
+ CRITICAL_SECTION m_csWindowCreate;
+ CRITICAL_SECTION m_csObjMap;
+
+ DWORD dwAtlBuildVer;
+ _AtlCreateWndData* m_pCreateWndList;
+ BOOL m_bDestroyHeap;
+ GUID* pguidVer;
+ DWORD m_dwHeaps;
+ HANDLE* m_phHeaps;
+ int m_nHeap;
+ _ATL_TERMFUNC_ELEM* m_pTermFuncs;
+} _ATL_MODULEA;
+
+typedef struct _ATL_MODULEW_TAG
+{
+ UINT cbSize;
+ HINSTANCE m_hInst;
+ HINSTANCE m_hInstResource;
+ HINSTANCE m_hInstTypeLib;
+ _ATL_OBJMAP_ENTRYW* m_pObjMap;
+ LONG m_nLockCnt;
+ HANDLE m_hHeap;
+ union
+ {
+ CRITICAL_SECTION m_csTypeInfoHolder;
+ CRITICAL_SECTION m_csStaticDataInit;
+ };
+ CRITICAL_SECTION m_csWindowCreate;
+ CRITICAL_SECTION m_csObjMap;
+
+ DWORD dwAtlBuildVer;
+ _AtlCreateWndData* m_pCreateWndList;
+ BOOL m_bDestroyHeap;
+ GUID* pguidVer;
+ DWORD m_dwHeaps;
+ HANDLE* m_phHeaps;
+ int m_nHeap;
+ _ATL_TERMFUNC_ELEM* m_pTermFuncs;
+} _ATL_MODULEW;
+
+typedef struct _ATL_INTMAP_ENTRY_TAG
+{
+ const IID* piid; // the interface id (IID)
+ DWORD dw;
+ _ATL_CREATORARGFUNC* pFunc; //NULL:end, 1:offset, n:ptr
+} _ATL_INTMAP_ENTRY;
+
+ATLAPI AtlModuleInit(_ATL_MODULEA* pM, _ATL_OBJMAP_ENTRYA* p, HINSTANCE h);
+ATLAPI AtlModuleRegisterClassObjects(_ATL_MODULEA* pM, DWORD dwClsContext, DWORD dwFlags);
+ATLAPI AtlModuleTerm(_ATL_MODULEA* pM);
+ATLAPI AtlInternalQueryInterface(LPVOID pThis,
+ const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, LPVOID* ppvObject);
--- /dev/null Thu Aug 30 15:30:55 2001
+++ dlls/atl/atl_main.c Fri Jul 2 08:33:42 2004
@@ -0,0 +1,153 @@
+/*
+ * Implementation of Active Template Library (atl.dll)
+ *
+ * Copyright 2004 Aric Stewart for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winerror.h"
+#include "winuser.h"
+#include "wine/debug.h"
+#include "objbase.h"
+#include "objidl.h"
+#include "ole2.h"
+#include "atlbase.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(atl);
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ TRACE("(0x%p, %ld, %p)\n",hinstDLL,fdwReason,lpvReserved);
+
+ if (fdwReason == DLL_PROCESS_ATTACH)
+ {
+ }
+ else if (fdwReason == DLL_PROCESS_DETACH)
+ {
+ }
+
+ return TRUE;
+}
+
+ATLAPI AtlModuleInit(_ATL_MODULEA* pM, _ATL_OBJMAP_ENTRYA* p, HINSTANCE h)
+{
+ INT i;
+
+ FIXME("SEMI-STUB (%p %p %p)\n",pM,p,h);
+
+ memset(pM,0,sizeof(_ATL_MODULEA));
+ pM->cbSize = sizeof(_ATL_MODULEA);
+ pM->m_hInst = h;
+ pM->m_hInstResource = h;
+ pM->m_hInstTypeLib = h;
+ pM->m_pObjMap = p;
+ pM->m_hHeap = GetProcessHeap();
+
+ /* call mains */
+ i = 0;
+ while (pM->m_pObjMap[i].pclsid != NULL)
+ {
+ TRACE("Initializeing object %i\n",i);
+ p[i].pfnObjectMain(TRUE);
+ i++;
+ }
+
+ return S_OK;
+}
+
+ATLAPI AtlModuleRegisterClassObjects(_ATL_MODULEA *pM, DWORD dwClsContext,
+ DWORD dwFlags)
+{
+ HRESULT hRes = S_OK;
+ int i=0;
+
+ TRACE("(%p %li %li)\n",pM, dwClsContext, dwFlags);
+
+ if (pM == NULL)
+ return E_INVALIDARG;
+
+ while(pM->m_pObjMap[i].pclsid != NULL)
+ {
+ IUnknown* pUnknown;
+ _ATL_OBJMAP_ENTRYA *obj = &(pM->m_pObjMap[i]);
+ HRESULT rc;
+
+ TRACE("Registering object %i\n",i);
+ if (obj->pfnGetClassObject)
+ {
+ rc = obj->pfnGetClassObject(obj->pfnCreateInstance, &IID_IUnknown,
+ (LPVOID*)&pUnknown);
+ if (SUCCEEDED (rc) )
+ {
+ CoRegisterClassObject(obj->pclsid, pUnknown, dwClsContext,
+ dwFlags, &obj->dwRegister);
+ if (pUnknown)
+ IUnknown_Release(pUnknown);
+ }
+ }
+ i++;
+ }
+
+ return hRes;
+}
+
+ATLAPI AtlInternalQueryInterface(LPVOID this, const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, LPVOID* ppvObject)
+{
+ int i = 0;
+ HRESULT rc = E_NOINTERFACE;
+ TRACE("(%p, %p, %p, %p)\n",this, pEntries, iid, ppvObject);
+
+ if (IsEqualGUID(iid,&IID_IUnknown))
+ {
+ TRACE("Returning IUnknown\n");
+ *ppvObject = this;
+ IUnknown_AddRef((IUnknown*)this);
+ return S_OK;
+ }
+
+ while (pEntries[i].pFunc != 0)
+ {
+ TRACE("Trying entry %i (%p %li %p)\n",i,pEntries[i].piid,
+ pEntries[i].dw, pEntries[i].pFunc);
+
+ if (IsEqualGUID(iid,pEntries[i].piid))
+ {
+ TRACE("MATCH\n");
+ if (pEntries[i].pFunc == (_ATL_CREATORARGFUNC*)1)
+ {
+ TRACE("Offset\n");
+ *ppvObject = ((LPSTR)this+pEntries[i].dw);
+ IUnknown_AddRef((IUnknown*)this);
+ rc = S_OK;
+ }
+ else
+ {
+ TRACE("Function\n");
+ rc = pEntries[i].pFunc(this, iid, ppvObject,0);
+ }
+ break;
+ }
+ i++;
+ }
+ TRACE("Done returning (0x%lx)\n",rc);
+ return rc;
+}
--- /dev/null Thu Aug 30 15:30:55 2001
+++ dlls/atl/atl.spec Fri Jul 2 08:33:42 2004
@@ -0,0 +1,54 @@
+# Generated from atl.dll
+
+1 stub DllCanUnloadNow
+2 stub DllGetClassObject
+3 stub DllRegisterServer
+4 stub DllUnregisterServer
+10 stub AtlAdvise
+11 stub AtlUnadvise
+12 stub AtlFreeMarshalStream
+13 stub AtlMarshalPtrInProc
+14 stub AtlUnmarshalPtr
+15 stub AtlModuleGetClassObject
+16 stdcall AtlModuleInit(ptr long long)
+17 stdcall AtlModuleRegisterClassObjects(ptr long long)
+18 stub AtlModuleRegisterServer
+19 stub AtlModuleRegisterTypeLib
+20 stub AtlModuleRevokeClassObjects
+21 stub AtlModuleTerm
+22 stub AtlModuleUnregisterServer
+23 stub AtlModuleUpdateRegistryFromResourceD
+24 stub AtlWaitWithMessageLoop
+25 stub AtlSetErrorInfo
+26 stub AtlCreateTargetDC
+27 stub AtlHiMetricToPixel
+28 stub AtlPixelToHiMetric
+29 stub AtlDevModeW2A
+30 stub AtlComPtrAssign
+31 stub AtlComQIPtrAssign
+32 stdcall AtlInternalQueryInterface(ptr ptr ptr ptr)
+34 stub AtlGetVersion
+35 stub AtlAxDialogBoxW
+36 stub AtlAxDialogBoxA
+37 stub AtlAxCreateDialogW
+38 stub AtlAxCreateDialogA
+39 stub AtlAxCreateControl
+40 stub AtlAxCreateControlEx
+41 stub AtlAxAttachControl
+42 stub AtlAxWinInit
+43 stub AtlModuleAddCreateWndData
+44 stub AtlModuleExtractCreateWndData
+45 stub AtlModuleRegisterWndClassInfoW
+46 stub AtlModuleRegisterWndClassInfoA
+47 stub AtlAxGetControl
+48 stub AtlAxGetHost
+49 stub AtlRegisterClassCategoriesHelper
+50 stub AtlIPersistStreamInit_Load
+51 stub AtlIPersistStreamInit_Save
+52 stub AtlIPersistPropertyBag_Load
+53 stub AtlIPersistPropertyBag_Save
+54 stub AtlGetObjectSourceInterface
+55 stub AtlModuleUnRegisterTypeLib
+56 stub AtlModuleLoadTypeLib
+57 stub AtlModuleUnregisterServerEx
+58 stub AtlModuleAddTermFunc
--- /dev/null Thu Aug 30 15:30:55 2001
+++ dlls/atl/Makefile.in Fri Jul 2 08:33:42 2004
@@ -0,0 +1,15 @@
+# Generated from atl.dll
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+MODULE = atl.dll
+IMPORTS = kernel32 ole32
+EXTRALIBS = -luuid
+
+C_SRCS = \
+ atl_main.c
+
+ at MAKE_DLL_RULES@
+
+### Dependencies:
More information about the wine-patches
mailing list