* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <precomp.h>
#include <wingdi.h>
-WINE_DEFAULT_DEBUG_CHANNEL(atl100);
+#define ATLVer1Size FIELD_OFFSET(_ATL_MODULEW, dwAtlBuildVer)
+
+HINSTANCE atl_instance;
typedef unsigned char cpp_bool;
{
_ATL_TERMFUNC_ELEM *termfunc_elem;
- TRACE("(%p %p %ld)\n", pM, pFunc, dw);
+ TRACE("version %04x (%p %p %ld)\n", _ATL_VER, pM, pFunc, dw);
- termfunc_elem = HeapAlloc(GetProcessHeap(), 0, sizeof(_ATL_TERMFUNC_ELEM));
- termfunc_elem->pFunc = pFunc;
- termfunc_elem->dw = dw;
- termfunc_elem->pNext = pM->m_pTermFuncs;
+ if (_ATL_VER > _ATL_VER_30 || pM->cbSize > ATLVer1Size) {
+ termfunc_elem = HeapAlloc(GetProcessHeap(), 0, sizeof(_ATL_TERMFUNC_ELEM));
+ termfunc_elem->pFunc = pFunc;
+ termfunc_elem->dw = dw;
+ termfunc_elem->pNext = pM->m_pTermFuncs;
- pM->m_pTermFuncs = termfunc_elem;
+ pM->m_pTermFuncs = termfunc_elem;
+ }
return S_OK;
}
+#if _ATL_VER > _ATL_VER_30
+
/***********************************************************************
* AtlCallTermFunc [atl100.@]
*/
pM->m_pTermFuncs = NULL;
}
+#endif
+
/***********************************************************************
* AtlLoadTypeLib [atl100.56]
*/
return S_OK;
}
+#if _ATL_VER <= _ATL_VER_80
+
+/***********************************************************************
+ * AtlRegisterTypeLib [atl80.19]
+ */
+HRESULT WINAPI AtlRegisterTypeLib(HINSTANCE inst, const WCHAR *index)
+{
+ ITypeLib *typelib;
+ BSTR path;
+ HRESULT hres;
+
+ TRACE("(%p %s)\n", inst, debugstr_w(index));
+
+ hres = AtlLoadTypeLib(inst, index, &path, &typelib);
+ if(FAILED(hres))
+ return hres;
+
+ hres = RegisterTypeLib(typelib, path, NULL); /* FIXME: pass help directory */
+ ITypeLib_Release(typelib);
+ SysFreeString(path);
+ return hres;
+}
+
+#endif
+
+#if _ATL_VER > _ATL_VER_30
+
/***********************************************************************
* AtlWinModuleInit [atl100.65]
*/
HRESULT WINAPI AtlWinModuleInit(_ATL_WIN_MODULE *winmod)
{
- TRACE("(%p\n", winmod);
+ TRACE("(%p)\n", winmod);
if(winmod->cbSize != sizeof(*winmod))
return E_INVALIDARG;
}
return S_OK;
+}
+
+/***********************************************************************
+ * AtlComModuleRevokeClassObjects [atl100.20]
+ */
+HRESULT WINAPI AtlComModuleRevokeClassObjects(_ATL_COM_MODULE *module)
+{
+ _ATL_OBJMAP_ENTRY **iter;
+ HRESULT hres;
+
+ TRACE("(%p)\n", module);
+
+ if(!module)
+ return E_INVALIDARG;
+
+ for(iter = module->m_ppAutoObjMapFirst; iter < module->m_ppAutoObjMapLast; iter++) {
+ hres = CoRevokeClassObject((*iter)->dwRegister);
+ if(FAILED(hres))
+ return hres;
+ }
+ return S_OK;
}
/***********************************************************************
return S_OK;
}
+#endif
+
/***********************************************************************
* AtlRegisterClassCategoriesHelper [atl100.49]
*/
return hres;
}
+#if _ATL_VER >= _ATL_VER90
+
/***********************************************************************
* AtlSetPerUserRegistration [atl100.67]
*/
return S_OK;
}
+#endif
+
/***********************************************************************
* AtlGetVersion [atl100.@]
*/
DWORD WINAPI AtlGetVersion(void *pReserved)
{
- return _ATL_VER;
+ TRACE("version %04x (%p)\n", _ATL_VER, pReserved);
+ return _ATL_VER;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
+ atl_instance = hinstDLL;
DisableThreadLibraryCalls(hinstDLL);
break;
case DLL_PROCESS_DETACH: