--- include/atl/atlbase.h.orig 2005-04-14 17:54:32.000000000 +0900 +++ include/atl/atlbase.h 2007-12-23 14:38:02.467500000 +0900 @@ -10,6 +10,9 @@ #ifndef __ATLBASE_H__ #define __ATLBASE_H__ +#if __GNUC__ >=3 +#pragma GCC system_header +#endif #ifndef __cplusplus #error ATL requires C++ compilation (use a .cpp suffix) @@ -73,19 +76,47 @@ #define _ATL_TYPELIB_INDEX_LENGTH 10 #define _ATL_QUOTES_SPACE 2 -#pragma pack(push, _ATL_PACKING) +#pragma pack(push, 8) #if defined(_ATL_DLL) #pragma comment(lib, "atl.lib") #endif -extern "C" const __declspec(selectany) GUID LIBID_ATLLib = {0x44EC0535,0x400F,0x11D0,{0x9D,0xCD,0x00,0xA0,0xC9,0x03,0x91,0xD3}}; -extern "C" const __declspec(selectany) CLSID CLSID_Registrar = {0x44EC053A,0x400F,0x11D0,{0x9D,0xCD,0x00,0xA0,0xC9,0x03,0x91,0xD3}}; -extern "C" const __declspec(selectany) IID IID_IRegistrar = {0x44EC053B,0x400F,0x11D0,{0x9D,0xCD,0x00,0xA0,0xC9,0x03,0x91,0xD3}}; -extern "C" const __declspec(selectany) IID IID_IAxWinHostWindow = {0xb6ea2050,0x48a,0x11d1,{0x82,0xb9,0x0,0xc0,0x4f,0xb9,0x94,0x2e}}; -extern "C" const __declspec(selectany) IID IID_IAxWinAmbientDispatch = {0xb6ea2051,0x48a,0x11d1,{0x82,0xb9,0x0,0xc0,0x4f,0xb9,0x94,0x2e}}; -extern "C" const __declspec(selectany) IID IID_IInternalConnection = {0x72AD0770,0x6A9F,0x11d1,{0xBC,0xEC,0x00,0x60,0x08,0x8F,0x44,0x4E}}; -extern "C" const __declspec(selectany) IID IID_IDocHostUIHandlerDispatch = {0x425B5AF0,0x65F1,0x11d1,{0x96,0x11,0x00,0x00,0xF8,0x1E,0x0D,0x0D}}; +#define __uuidof(I) IID_##I + +#include + +namespace ATL +{ +inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2) +{ + return ( + ((unsigned long *) &rguid1)[0] == ((unsigned long *) &rguid2)[0] && + ((unsigned long *) &rguid1)[1] == ((unsigned long *) &rguid2)[1] && + ((unsigned long *) &rguid1)[2] == ((unsigned long *) &rguid2)[2] && + ((unsigned long *) &rguid1)[3] == ((unsigned long *) &rguid2)[3]); +} +} + +#ifdef _INIT_ATL_COMMON_VARS +extern "C" const GUID LIBID_ATLLib = {0x44EC0535,0x400F,0x11D0,{0x9D,0xCD,0x00,0xA0,0xC9,0x03,0x91,0xD3}}; +extern "C" const CLSID CLSID_Registrar = {0x44EC053A,0x400F,0x11D0,{0x9D,0xCD,0x00,0xA0,0xC9,0x03,0x91,0xD3}}; +extern "C" const IID IID_IRegistrar = {0x44EC053B,0x400F,0x11D0,{0x9D,0xCD,0x00,0xA0,0xC9,0x03,0x91,0xD3}}; +extern "C" const IID IID_IAxWinHostWindow = {0xb6ea2050,0x48a,0x11d1,{0x82,0xb9,0x0,0xc0,0x4f,0xb9,0x94,0x2e}}; +extern "C" const IID IID_IAxWinAmbientDispatch = {0xb6ea2051,0x48a,0x11d1,{0x82,0xb9,0x0,0xc0,0x4f,0xb9,0x94,0x2e}}; +extern "C" const IID IID_IInternalConnection = {0x72AD0770,0x6A9F,0x11d1,{0xBC,0xEC,0x00,0x60,0x08,0x8F,0x44,0x4E}}; +extern "C" const IID IID_IDocHostUIHandlerDispatch = {0x425B5AF0,0x65F1,0x11d1,{0x96,0x11,0x00,0x00,0xF8,0x1E,0x0D,0x0D}}; +#else +extern "C" { +extern const GUID LIBID_ATLLib; +extern const CLSID CLSID_Registrar; +extern const IID IID_IRegistrar; +extern const IID IID_IAxWinHostWindow; +extern const IID IID_IAxWinAmbientDispatch; +extern const IID IID_IInternalConnection; +extern const IID IID_IDocHostUIHandlerDispatch; +} +#endif #ifndef _ATL_DLL_IMPL namespace ATL @@ -135,7 +166,7 @@ IUnknown* p = NULL; if (pfnGetClassObject == NULL) return S_OK; - HRESULT hRes = pfnGetClassObject(pfnCreateInstance, IID_IUnknown, (LPVOID*) &p); + HRESULT hRes = pfnGetClassObject((LPVOID)pfnCreateInstance, IID_IUnknown, (LPVOID*) &p); if (SUCCEEDED(hRes)) hRes = CoRegisterClassObject(*pclsid, p, dwClsContext, dwFlags, &dwRegister); if (p != NULL) @@ -284,13 +315,15 @@ }; #pragma pack(pop) -PVOID __stdcall __AllocStdCallThunk(VOID); -VOID __stdcall __FreeStdCallThunk(PVOID); +//PVOID __stdcall __AllocStdCallThunk(VOID); +//VOID __stdcall __FreeStdCallThunk(PVOID); -#define AllocStdCallThunk() __AllocStdCallThunk() -#define FreeStdCallThunk(p) __FreeStdCallThunk(p) +//#define AllocStdCallThunk() __AllocStdCallThunk() +//#define FreeStdCallThunk(p) __FreeStdCallThunk(p) -#pragma comment(lib, "atlthunk.lib") +//#pragma comment(lib, "atlthunk.lib") +#define AllocStdCallThunk() HeapAlloc(GetProcessHeap(),0,sizeof(_stdcallthunk)) +#define FreeStdCallThunk(p) HeapFree(GetProcessHeap(), 0, p) #elif defined (_M_AMD64) #pragma pack(push,2) @@ -465,7 +498,7 @@ return( HRESULT_FROM_WIN32( nError ) ); } -inline void __declspec(noreturn) _AtlRaiseException( DWORD dwExceptionCode, DWORD dwExceptionFlags = EXCEPTION_NONCONTINUABLE ) +inline void _AtlRaiseException( DWORD dwExceptionCode, DWORD dwExceptionFlags = EXCEPTION_NONCONTINUABLE ) { RaiseException( dwExceptionCode, dwExceptionFlags, 0, NULL ); } @@ -658,6 +691,7 @@ class _NoAddRefReleaseOnCComPtr : public T { private: + _NoAddRefReleaseOnCComPtr(); STDMETHOD_(ULONG, AddRef)()=0; STDMETHOD_(ULONG, Release)()=0; }; @@ -781,6 +815,7 @@ { return AtlAdvise(p, pUnk, iid, pdw); } +#if 0 HRESULT CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) { ATLASSERT(p == NULL); @@ -801,11 +836,12 @@ ATLASSERT(pp != NULL && *pp == NULL); return p->QueryInterface(__uuidof(Q), (void**)pp); } +#endif T* p; }; -template +template class CComQIPtr { public: @@ -933,6 +969,7 @@ { return AtlAdvise(p, pUnk, iid, pdw); } +#if 0 HRESULT CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) { ATLASSERT(p == NULL); @@ -953,6 +990,7 @@ ATLASSERT(pp != NULL && *pp == NULL); return p->QueryInterface(__uuidof(Q), (void**)pp); } +#endif T* p; }; @@ -1087,12 +1125,14 @@ hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(IUnknown), (void**)&p); return hr; } +#if 0 template HRESULT QueryInterface(Q** pp) { ATLASSERT(pp != NULL && *pp == NULL); return p->QueryInterface(__uuidof(Q), (void**)pp); } +#endif IUnknown* p; }; @@ -1257,21 +1297,26 @@ LeaveCriticalSection(&m_sec); return S_OK; } + static void _InitHandler(void *pData, LPEXCEPTION_POINTERS ep) + { + HRESULT &hRes=*reinterpret_cast(pData); + if (STATUS_NO_MEMORY == ep->ExceptionRecord->ExceptionCode) + hRes = E_OUTOFMEMORY; + else + hRes = E_FAIL; + } HRESULT Init() throw() { HRESULT hRes = S_OK; - __try - { + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) + { + _sehandler.Set(_sejmpbuf, &hRes, reinterpret_cast<__SEHandler::PF>(EXCEPTION_EXECUTE_HANDLER), _InitHandler); InitializeCriticalSection(&m_sec); - } + } // structured exception may be raised in low memory situations - __except(EXCEPTION_EXECUTE_HANDLER) - { - if (STATUS_NO_MEMORY == GetExceptionCode()) - hRes = E_OUTOFMEMORY; - else - hRes = E_FAIL; - } + _sehandler.Reset(); return hRes; } @@ -2799,10 +2844,19 @@ class CComModule; -__declspec(selectany) CComModule* _pModule=NULL; +#ifdef _INIT_ATL_COMMON_VARS +CComModule* _pModule=NULL; +#else +extern CComModule* _pModule; +#endif + // {B62F5910-6528-11d1-9611-0000F81E0D0D} -_declspec(selectany) GUID GUID_ATLVer30 = { 0xb62f5910, 0x6528, 0x11d1, { 0x96, 0x11, 0x0, 0x0, 0xf8, 0x1e, 0xd, 0xd } }; +#ifdef _INIT_ATL_COMMON_VARS +GUID GUID_ATLVer30 = { 0xb62f5910, 0x6528, 0x11d1, { 0x96, 0x11, 0x0, 0x0, 0xf8, 0x1e, 0xd, 0xd } }; +#else +extern GUID GUID_ATLVer30; +#endif class CComModule : public _ATL_MODULE { @@ -4286,7 +4340,9 @@ #endif -__declspec(selectany) GUID CComModule::m_libid = {0x0,0x0,0x0,{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; +#ifdef _INIT_ATL_COMMON_VARS +GUID CComModule::m_libid = {0x0,0x0,0x0,{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}}; +#endif #ifdef _ATL_STATIC_REGISTRY #define UpdateRegistryFromResource UpdateRegistryFromResourceS @@ -4355,7 +4411,9 @@ LONG m_nLockCnt; }; -__declspec(selectany) UINT CComApartment::ATL_CREATE_OBJECT = 0; +#ifdef _INIT_ATL_COMMON_VARS +UINT CComApartment::ATL_CREATE_OBJECT = 0; +#endif class CComSimpleThreadAllocator { @@ -5855,6 +5913,10 @@ } } + static int _Except(void *pThis, LPEXCEPTION_POINTERS lpEP) + { + return reinterpret_cast(pThis)->Except(lpEP); + } void Seek(int nElement) { if(nElement < 0 || nElement >= m_nMaxElements) @@ -5866,41 +5928,53 @@ { if(nElement < 0 || nElement >= m_nMaxElements) _AtlRaiseException((DWORD)EXCEPTION_ARRAY_BOUNDS_EXCEEDED); - __try + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, this, _Except); T* p = &m_pBase[nElement]; *p = Element; m_pTop = p > m_pTop ? p : m_pTop; } - __except(Except(GetExceptionInformation())) + else { } + _sehandler.Reset(); } template void WriteBulk(Q& helper) { - __try + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, this, _Except); m_pCurrent = helper(m_pBase); m_pTop = m_pCurrent > m_pTop ? m_pCurrent : m_pTop; } - __except(Except(GetExceptionInformation())) + else { } + _sehandler.Reset(); } void Write(const T& Element) { if (m_pCurrent < &m_pBase[m_nMaxElements]) { - __try + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, this, _Except); *m_pCurrent = Element; m_pCurrent++; m_pTop = m_pCurrent > m_pTop ? m_pCurrent : m_pTop; } - __except(Except(GetExceptionInformation())) + else { } + _sehandler.Reset(); } } T& Read() @@ -5910,14 +5984,18 @@ operator BSTR() { BSTR bstrTemp = NULL ; - __try + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, this, _Except); bstrTemp = SysAllocStringByteLen((char*) m_pBase, (UINT) ((BYTE*)m_pTop - (BYTE*)m_pBase)); } - __except(Except(GetExceptionInformation())) + else { } + _sehandler.Reset(); return bstrTemp; } const T& operator[](int nElement) const @@ -6336,6 +6414,11 @@ //Although these functions are big, they are only used once in a module //so we should make them inline. +ATLINLINE int atlmoduleinitfilter(void *, LPEXCEPTION_POINTERS ep) +{ + return ep->ExceptionRecord->ExceptionCode == STATUS_NO_MEMORY ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH; +} + ATLINLINE ATLAPI AtlModuleInit(_ATL_MODULE* pM, _ATL_OBJMAP_ENTRY* p, HINSTANCE h) { ATLASSERT(pM != NULL); @@ -6352,32 +6435,43 @@ pM->m_hInst = pM->m_hInstTypeLib = pM->m_hInstResource = h; pM->m_nLockCnt=0L; pM->m_hHeap = NULL; - __try { + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, NULL, atlmoduleinitfilter); InitializeCriticalSection(&pM->m_csTypeInfoHolder); - } __except (GetExceptionCode() == STATUS_NO_MEMORY ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { + } else { ZeroMemory(&pM->m_csTypeInfoHolder, sizeof(pM->m_csTypeInfoHolder)); - return STATUS_NO_MEMORY; + _sehandler.Reset(); + return STATUS_NO_MEMORY; } + _sehandler.Reset(); - __try { + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, NULL, atlmoduleinitfilter); InitializeCriticalSection(&pM->m_csWindowCreate); - } __except (GetExceptionCode() == STATUS_NO_MEMORY ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { + } else { DeleteCriticalSection(&pM->m_csTypeInfoHolder); ZeroMemory(&pM->m_csWindowCreate, sizeof(pM->m_csWindowCreate)); ZeroMemory(&pM->m_csTypeInfoHolder, sizeof(pM->m_csTypeInfoHolder)); + _sehandler.Reset(); return STATUS_NO_MEMORY; } + _sehandler.Reset(); - __try { + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, NULL, atlmoduleinitfilter); InitializeCriticalSection(&pM->m_csObjMap); - } __except (GetExceptionCode() == STATUS_NO_MEMORY ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { + } else { DeleteCriticalSection(&pM->m_csWindowCreate); DeleteCriticalSection(&pM->m_csTypeInfoHolder); ZeroMemory(&pM->m_csObjMap, sizeof(pM->m_csObjMap)); ZeroMemory(&pM->m_csWindowCreate, sizeof(pM->m_csWindowCreate)); ZeroMemory(&pM->m_csTypeInfoHolder, sizeof(pM->m_csTypeInfoHolder)); + _sehandler.Reset(); return STATUS_NO_MEMORY; } + _sehandler.Reset(); #ifdef _ATL_DLL_IMPL if (pM->cbSize > _nAtlModuleVer21Size) #endif @@ -6450,6 +6544,11 @@ return hRes; } +ATLINLINE void atlfinalleavecriticalsection(void *pData) +{ + LeaveCriticalSection(reinterpret_cast(pData)); +} + ATLINLINE ATLAPI AtlModuleGetClassObject(_ATL_MODULE* pM, REFCLSID rclsid, REFIID riid, LPVOID* ppv) { ATLASSERT(pM != NULL); @@ -6473,15 +6572,15 @@ if (pEntry->pCF == NULL) { EnterCriticalSection(&pM->m_csObjMap); - __try + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, &pM->m_csObjMap, EXCEPTION_CONTINUE_SEARCH, NULL, atlfinalleavecriticalsection); if (pEntry->pCF == NULL) - hRes = pEntry->pfnGetClassObject(pEntry->pfnCreateInstance, IID_IUnknown, (LPVOID*)&pEntry->pCF); - } - __finally - { - LeaveCriticalSection(&pM->m_csObjMap); + hRes = pEntry->pfnGetClassObject((void *)(pEntry->pfnCreateInstance), IID_IUnknown, (LPVOID*)&pEntry->pCF); } + _sehandler.Reset(); } if (pEntry->pCF != NULL) hRes = pEntry->pCF->QueryInterface(riid, ppv); --- include/atl/atlcom.h.orig 2005-04-14 17:54:32.000000000 +0900 +++ include/atl/atlcom.h 2007-12-03 22:43:54.833375000 +0900 @@ -10,6 +10,9 @@ #ifndef __ATLCOM_H__ #define __ATLCOM_H__ +#if __GNUC__ >=3 +#pragma GCC system_header +#endif #ifndef __cplusplus #error ATL requires C++ compilation (use a .cpp suffix) @@ -19,7 +22,10 @@ #error atlcom.h requires atlbase.h to be included first #endif -#pragma pack(push, _ATL_PACKING) +#include +using ::std::min; + +#pragma pack(push, 8) EXTERN_C const IID IID_ITargetFrame; @@ -2191,19 +2197,23 @@ // override it in your class and call each base class' version of this #define BEGIN_COM_MAP(x) public: \ typedef x _ComMapClass; \ + static void _CacheFinal(void *pData)\ + {\ + reinterpret_cast<_ComMapClass*>(pData)->Unlock();\ + }\ static HRESULT WINAPI _Cache(void* pv, REFIID iid, void** ppvObject, DWORD_PTR dw)\ {\ _ComMapClass* p = (_ComMapClass*)pv;\ p->Lock();\ HRESULT hRes = E_FAIL; \ - __try \ + jmp_buf _sejmpbuf; \ + __SEHandler _sehandler; \ + if (__builtin_setjmp(_sejmpbuf) == 0) \ { \ + _sehandler.Set(_sejmpbuf, p, EXCEPTION_CONTINUE_SEARCH, NULL, _CacheFinal);\ hRes = CComObjectRootBase::_Cache(pv, iid, ppvObject, dw);\ } \ - __finally \ - { \ - p->Unlock();\ - } \ + _sehandler.Reset();\ return hRes;\ }\ IUnknown* _GetRawUnknown() \ @@ -2339,7 +2349,7 @@ return( pMap ); } #define BEGIN_OBJECT_MAP(x) static _ATL_OBJMAP_ENTRY x[] = { -#define END_OBJECT_MAP() {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}}; +#define END_OBJECT_MAP() {NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL}}; #define OBJECT_ENTRY(clsid, class) {&clsid, class::UpdateRegistry, class::_ClassFactoryCreatorClass::CreateInstance, class::_CreatorClass::CreateInstance, NULL, 0, class::GetObjectDescription, class::GetCategoryMap, class::ObjectMain }, #define OBJECT_ENTRY_NON_CREATEABLE(class) {&CLSID_NULL, class::UpdateRegistry, NULL, NULL, NULL, 0, NULL, class::GetCategoryMap, class::ObjectMain }, @@ -2492,9 +2502,9 @@ public: typedef ThreadModel _ThreadModel; #ifdef OLD_ATL_CRITSEC_CODE - typename typedef _ThreadModel::AutoCriticalSection _CritSec; + typedef typename _ThreadModel::AutoCriticalSection _CritSec; #else - typename typedef _ThreadModel::AutoDeleteCriticalSection _AutoDelCritSec; + typedef typename _ThreadModel::AutoDeleteCriticalSection _AutoDelCritSec; #endif /* OLD_ATL_CRITSEC_CODE */ typedef CComObjectLockT<_ThreadModel> ObjectLock; @@ -2638,8 +2648,8 @@ // Set refcount to 1 to protect destruction ~CComObject() { - m_dwRef = 1L; - FinalRelease(); + this->m_dwRef = 1L; + this->FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(_GetRawUnknown()); #endif @@ -2647,22 +2657,24 @@ } //If InternalAddRef or InternalRelease is undefined then your class //doesn't derive from CComObjectRoot - STDMETHOD_(ULONG, AddRef)() {return InternalAddRef();} + STDMETHOD_(ULONG, AddRef)() {return this->InternalAddRef();} STDMETHOD_(ULONG, Release)() { - ULONG l = InternalRelease(); + ULONG l = this->InternalRelease(); if (l == 0) delete this; return l; } //if _InternalQueryInterface is undefined then you forgot BEGIN_COM_MAP STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject) - {return _InternalQueryInterface(iid, ppvObject);} + {return this->_InternalQueryInterface(iid, ppvObject);} +#if 0 template HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp) { return QueryInterface(__uuidof(Q), (void**)pp); } +#endif static HRESULT WINAPI CreateInstance(CComObject** pp); }; @@ -2719,8 +2731,8 @@ #endif /* OLD_ATL_CRITSEC_CODE */ ~CComObjectCached() { - m_dwRef = 1L; - FinalRelease(); + this->m_dwRef = 1L; + this->FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(_GetRawUnknown()); #endif @@ -2729,14 +2741,14 @@ //doesn't derive from CComObjectRoot STDMETHOD_(ULONG, AddRef)() { - ULONG l = InternalAddRef(); + ULONG l = this->InternalAddRef(); if (l == 2) _Module.Lock(); return l; } STDMETHOD_(ULONG, Release)() { - ULONG l = InternalRelease(); + ULONG l = this->InternalRelease(); if (l == 0) delete this; else if (l == 1) @@ -2745,7 +2757,7 @@ } //if _InternalQueryInterface is undefined then you forgot BEGIN_COM_MAP STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject) - {return _InternalQueryInterface(iid, ppvObject);} + {return this->_InternalQueryInterface(iid, ppvObject);} #ifndef OLD_ATL_CRITSEC_CODE CComGlobalsThreadModel::AutoDeleteCriticalSection m_csCached; #endif /* OLD_ATL_CRITSEC_CODE */ @@ -2762,8 +2774,8 @@ // Set refcount to 1 to protect destruction ~CComObjectNoLock() { - m_dwRef = 1L; - FinalRelease(); + this->m_dwRef = 1L; + this->FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(_GetRawUnknown()); #endif @@ -2771,17 +2783,17 @@ //If InternalAddRef or InternalRelease is undefined then your class //doesn't derive from CComObjectRoot - STDMETHOD_(ULONG, AddRef)() {return InternalAddRef();} + STDMETHOD_(ULONG, AddRef)() {return this->InternalAddRef();} STDMETHOD_(ULONG, Release)() { - ULONG l = InternalRelease(); + ULONG l = this->InternalRelease(); if (l == 0) delete this; return l; } //if _InternalQueryInterface is undefined then you forgot BEGIN_COM_MAP STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject) - {return _InternalQueryInterface(iid, ppvObject);} + {return this->_InternalQueryInterface(iid, ppvObject);} }; // It is possible for Base not to derive from CComObjectRoot @@ -2794,14 +2806,14 @@ CComObjectGlobal(void* = NULL) { #ifndef OLD_ATL_CRITSEC_CODE - m_hResFinalConstruct = _AtlInitialConstruct(); + m_hResFinalConstruct = this->_AtlInitialConstruct(); if (SUCCEEDED(m_hResFinalConstruct)) #endif /* OLD_ATL_CRITSEC_CODE */ - m_hResFinalConstruct = FinalConstruct(); + m_hResFinalConstruct = this->FinalConstruct(); } ~CComObjectGlobal() { - FinalRelease(); + this->FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(_GetRawUnknown()); #endif @@ -2810,7 +2822,7 @@ STDMETHOD_(ULONG, AddRef)() {return _Module.Lock();} STDMETHOD_(ULONG, Release)(){return _Module.Unlock();} STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject) - {return _InternalQueryInterface(iid, ppvObject);} + {return this->_InternalQueryInterface(iid, ppvObject);} HRESULT m_hResFinalConstruct; }; @@ -2824,14 +2836,14 @@ CComObjectStack(void* = NULL) { #ifndef OLD_ATL_CRITSEC_CODE - m_hResFinalConstruct = _AtlInitialConstruct(); + m_hResFinalConstruct = this->_AtlInitialConstruct(); if (SUCCEEDED(m_hResFinalConstruct)) #endif /* OLD_ATL_CRITSEC_CODE */ - m_hResFinalConstruct = FinalConstruct(); + m_hResFinalConstruct = this->FinalConstruct(); } ~CComObjectStack() { - FinalRelease(); + this->FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(_GetRawUnknown()); #endif @@ -2850,6 +2862,8 @@ { public: typedef Base _BaseClass; + using Base::_GetRawUnknown; + using Base::m_pOuterUnknown; CComContainedObject(void* pv) {m_pOuterUnknown = (IUnknown*)pv;} #ifdef _ATL_DEBUG_INTERFACES ~CComContainedObject() @@ -2859,20 +2873,22 @@ } #endif - STDMETHOD_(ULONG, AddRef)() {return OuterAddRef();} - STDMETHOD_(ULONG, Release)() {return OuterRelease();} + STDMETHOD_(ULONG, AddRef)() {return this->OuterAddRef();} + STDMETHOD_(ULONG, Release)() {return this->OuterRelease();} STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject) { - HRESULT hr = OuterQueryInterface(iid, ppvObject); + HRESULT hr = this->OuterQueryInterface(iid, ppvObject); if (FAILED(hr) && _GetRawUnknown() != m_pOuterUnknown) - hr = _InternalQueryInterface(iid, ppvObject); + hr = this->_InternalQueryInterface(iid, ppvObject); return hr; } +#if 0 template HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp) { return QueryInterface(__uuidof(Q), (void**)pp); } +#endif //GetControllingUnknown may be virtual if the Base class has declared //DECLARE_GET_CONTROLLING_UNKNOWN() IUnknown* GetControllingUnknown() @@ -2915,18 +2931,18 @@ // override it in your class and call each base class' version of this HRESULT FinalConstruct() { - CComObjectRootEx::FinalConstruct(); + CComObjectRootEx::FinalConstruct(); return m_contained.FinalConstruct(); } void FinalRelease() { - CComObjectRootEx::FinalRelease(); + CComObjectRootEx::FinalRelease(); m_contained.FinalRelease(); } // Set refcount to 1 to protect destruction ~CComAggObject() { - m_dwRef = 1L; + this->m_dwRef = 1L; FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(this); @@ -2934,10 +2950,10 @@ _Module.Unlock(); } - STDMETHOD_(ULONG, AddRef)() {return InternalAddRef();} + STDMETHOD_(ULONG, AddRef)() {return this->InternalAddRef();} STDMETHOD_(ULONG, Release)() { - ULONG l = InternalRelease(); + ULONG l = this->InternalRelease(); if (l == 0) delete this; return l; @@ -2959,11 +2975,13 @@ hRes = m_contained._InternalQueryInterface(iid, ppvObject); return hRes; } +#if 0 template HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp) { return QueryInterface(__uuidof(Q), (void**)pp); } +#endif static HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, CComAggObject** pp) { _ATL_VALIDATE_OUT_POINTER(pp); @@ -3023,21 +3041,21 @@ // override it in your class and call each base class' version of this HRESULT FinalConstruct() { - InternalAddRef(); - CComObjectRootEx::FinalConstruct(); + this->InternalAddRef(); + CComObjectRootEx::FinalConstruct(); HRESULT hr = m_contained.FinalConstruct(); - InternalRelease(); + this->InternalRelease(); return hr; } void FinalRelease() { - CComObjectRootEx::FinalRelease(); + CComObjectRootEx::FinalRelease(); m_contained.FinalRelease(); } // Set refcount to 1 to protect destruction ~CComPolyObject() { - m_dwRef = 1L; + this->m_dwRef = 1L; FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(this); @@ -3045,10 +3063,10 @@ _Module.Unlock(); } - STDMETHOD_(ULONG, AddRef)() {return InternalAddRef();} + STDMETHOD_(ULONG, AddRef)() {return this->InternalAddRef();} STDMETHOD_(ULONG, Release)() { - ULONG l = InternalRelease(); + ULONG l = this->InternalRelease(); if (l == 0) delete this; return l; @@ -3072,11 +3090,13 @@ hRes = m_contained._InternalQueryInterface(iid, ppvObject); return hRes; } +#if 0 template HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp) { return QueryInterface(__uuidof(Q), (void**)pp); } +#endif static HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, CComPolyObject** pp) { _ATL_VALIDATE_OUT_POINTER(pp); @@ -3111,27 +3131,28 @@ class CComTearOffObject : public Base { public: + using Base::m_pOwner; CComTearOffObject(void* pv) { ATLASSERT(m_pOwner == NULL); - m_pOwner = reinterpret_cast*>(pv); + m_pOwner = reinterpret_cast*>(pv); m_pOwner->AddRef(); } // Set refcount to 1 to protect destruction ~CComTearOffObject() { - m_dwRef = 1L; - FinalRelease(); + this->m_dwRef = 1L; + this->FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(_GetRawUnknown()); #endif m_pOwner->Release(); } - STDMETHOD_(ULONG, AddRef)() {return InternalAddRef();} + STDMETHOD_(ULONG, AddRef)() {return this->InternalAddRef();} STDMETHOD_(ULONG, Release)() { - ULONG l = InternalRelease(); + ULONG l = this->InternalRelease(); if (l == 0) delete this; return l; @@ -3150,27 +3171,27 @@ public: typedef contained _BaseClass; CComCachedTearOffObject(void* pv) : - m_contained(((contained::_OwnerClass*)pv)->GetControllingUnknown()) + m_contained(((typename contained::_OwnerClass*)pv)->GetControllingUnknown()) { ATLASSERT(m_contained.m_pOwner == NULL); - m_contained.m_pOwner = reinterpret_cast*>(pv); + m_contained.m_pOwner = reinterpret_cast*>(pv); } //If you get a message that this call is ambiguous then you need to // override it in your class and call each base class' version of this HRESULT FinalConstruct() { - CComObjectRootEx::FinalConstruct(); + CComObjectRootEx::FinalConstruct(); return m_contained.FinalConstruct(); } void FinalRelease() { - CComObjectRootEx::FinalRelease(); + CComObjectRootEx::FinalRelease(); m_contained.FinalRelease(); } // Set refcount to 1 to protect destruction ~CComCachedTearOffObject() { - m_dwRef = 1L; + this->m_dwRef = 1L; FinalRelease(); #ifdef _ATL_DEBUG_INTERFACES _Module.DeleteNonAddRefThunk(this); @@ -3178,10 +3199,10 @@ } - STDMETHOD_(ULONG, AddRef)() {return InternalAddRef();} + STDMETHOD_(ULONG, AddRef)() {return this->InternalAddRef();} STDMETHOD_(ULONG, Release)() { - ULONG l = InternalRelease(); + ULONG l = this->InternalRelease(); if (l == 0) delete this; return l; @@ -3260,7 +3281,9 @@ { public: typedef license _LicenseClass; - typedef CComClassFactory2 _ComMapClass; + using license::IsLicenseValid; + using license::GetLicenseKey; +// typedef CComClassFactory2 _ComMapClass; BEGIN_COM_MAP(CComClassFactory2) COM_INTERFACE_ENTRY(IClassFactory) COM_INTERFACE_ENTRY(IClassFactory2) @@ -3297,7 +3320,7 @@ if (ppvObject == NULL) return E_POINTER; *ppvObject = NULL; - if ( ((bstrKey != NULL) && !VerifyLicenseKey(bstrKey)) || + if ( ((bstrKey != NULL) && !this->VerifyLicenseKey(bstrKey)) || ((bstrKey == NULL) && !IsLicenseValid()) ) return CLASS_E_NOTLICENSED; if ((pUnkOuter != NULL) && !InlineIsEqualUnknown(riid)) @@ -3363,7 +3386,7 @@ if (pUnkOuter != NULL) hRes = CLASS_E_NOAGGREGATION; else - hRes = _Module.CreateInstance(m_pfnCreateInstance, riid, ppvObj); + hRes = _Module.CreateInstance((LPVOID)m_pfnCreateInstance, riid, ppvObj); } return hRes; } @@ -3454,6 +3477,7 @@ lpszHelpFile, iid, hRes); } #endif +#if 0 template static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp) { @@ -3464,6 +3488,7 @@ { return T::_CreatorClass::CreateInstance(NULL, __uuidof(Q), (void**) pp); } +#endif }; // ATL doesn't support multiple LCID's at the same time @@ -3651,7 +3676,7 @@ { CComPtr spInfo(spTypeInfo); CComPtr spTypeInfo2; - if (SUCCEEDED(spTypeInfo->QueryInterface(&spTypeInfo2))) + if (SUCCEEDED(spTypeInfo->QueryInterface(IID_ITypeInfo2, (void**)&spTypeInfo2))) spInfo = spTypeInfo2; m_pInfo = spInfo.Detach(); @@ -3760,6 +3785,9 @@ ///////////////////////////////////////////////////////////////////////////// // IDispEventImpl +template +struct _ATL_EVENT_ENTRY; + #ifdef _ATL_DLL ATLAPI AtlGetObjectSourceInterface(IUnknown* punkObj, GUID* plibid, IID* piid, unsigned short* pdwMajor, unsigned short* pdwMinor); #else @@ -3909,16 +3937,17 @@ #else #pragma warning(disable:4740) // flow in/out of inline disables global opts -inline void __declspec(naked) __stdcall CComStdCallThunkHelper() +inline void __stdcall CComStdCallThunkHelper() { - __asm - { - mov eax, [esp+4]; // get pThunk - mov edx, [eax+4]; // get the pThunk->pThis - mov [esp+4], edx; // replace pThunk with pThis - mov eax, [eax+8]; // get pThunk->pfn - jmp eax; // jump pfn - }; + asm( + " movl $8(%ebp), %eax\n" // get pThunk + " movl $4(%eax), edx\n" // get the pThunk->pThis + " movl %edx, $8(%ebp)\n" // replace pThunk with pThis + " movl $8(%eax), %eax\n" // get pThunk->pfn + " movl %ebp, %esp\n" + " popl %ebp\n" + " jmp %eax" // jump pfn + ); } #pragma warning(default:4740) #endif @@ -3985,6 +4014,7 @@ class ATL_NO_VTABLE IDispEventSimpleImpl : public _IDispEventLocator { public: + using _IDispEventLocator::m_dwEventCookie; STDMETHOD(_LocDEQueryInterface)(REFIID riid, void ** ppvObject) { _ATL_VALIDATE_OUT_POINTER(ppvObject); @@ -3992,7 +4022,7 @@ if (InlineIsEqualGUID(riid, *pdiid) || InlineIsEqualUnknown(riid) || InlineIsEqualGUID(riid, IID_IDispatch) || - InlineIsEqualGUID(riid, m_iid)) + InlineIsEqualGUID(riid, this->m_iid)) { *ppvObject = this; AddRef(); @@ -4186,6 +4216,10 @@ { public: typedef tihclass _tihclass; + using IDispEventSimpleImpl::m_libid; + using IDispEventSimpleImpl::m_iid; + using IDispEventSimpleImpl::m_wMajorVerNum; + using IDispEventSimpleImpl::m_wMinorVerNum; IDispEventImpl() { @@ -4475,6 +4509,11 @@ } }; +template +class ATL_NO_VTABLE CComEnum; +template +class ATL_NO_VTABLE CComEnumOnSTL; + ///////////////////////////////////////////////////////////////////////////// // CComEnumImpl @@ -4746,7 +4785,7 @@ return S_OK; } -template +template class ATL_NO_VTABLE CComEnum : public CComEnumImpl, public CComObjectRootEx< ThreadModel > @@ -4868,7 +4907,7 @@ return hRes; } -template +template class ATL_NO_VTABLE CComEnumOnSTL : public IEnumOnSTLImpl, public CComObjectRootEx< ThreadModel > @@ -4901,7 +4940,7 @@ return E_INVALIDARG; HRESULT hr = E_FAIL; Index--; - CollType::iterator iter = m_coll.begin(); + typename CollType::iterator iter = m_coll.begin(); while (iter != m_coll.end() && Index > 0) { iter++; @@ -5314,7 +5353,7 @@ if (InlineIsEqualGUID(riid, IID_IConnectionPoint) || InlineIsEqualUnknown(riid)) { *ppvObject = this; - AddRef(); + this->AddRef(); #ifdef _ATL_DEBUG_INTERFACES _Module.AddThunk((IUnknown**)ppvObject, _T("IConnectionPointImpl"), riid); #endif // _ATL_DEBUG_INTERFACES --- include/atl/atlconv.h.orig 2005-04-14 17:54:32.000000000 +0900 +++ include/atl/atlconv.h 2007-12-31 07:29:34.759750000 +0900 @@ -10,6 +10,9 @@ #ifndef __ATLCONV_H__ #define __ATLCONV_H__ +#if __GNUC__ >=3 +#pragma GCC system_header +#endif #ifndef __cplusplus #error ATL requires C++ compilation (use a .cpp suffix) @@ -30,7 +33,11 @@ // Following code is to avoid alloca causing a stack overflow. // It is intended for use from the _ATL_SAFE_ALLOCA macros // or Conversion macros. -__declspec(selectany) DWORD _Atlosplatform = 0; +#ifdef _INIT_ATL_COMMON_VARS +DWORD _Atlosplatform = 0; +#else +extern DWORD _Atlosplatform; +#endif inline BOOL _AtlGetVersionEx() { OSVERSIONINFO osi; @@ -156,8 +163,11 @@ #pragma prefast(suppress:515, "Atlresetstkoflw is the same as resetstkoflw") // Verifies if sufficient space is available on the stack. -inline bool _AtlVerifyStackAvailable(SIZE_T Size) +inline bool _AtlVerifyStackAvailable(SIZE_T /*Size*/) { +#if 1 + return false; +#else bool bStackAvailable = true; __try @@ -173,6 +183,7 @@ _Atlresetstkoflw(); } return bStackAvailable; +#endif } #pragma prefast(pop) @@ -281,15 +292,15 @@ #ifdef _CONVERSION_USES_THREAD_LOCALE #ifndef _DEBUG - #define USES_CONVERSION int _convert; _convert; UINT _acp = GetACP(); _acp; LPCWSTR _lpw; _lpw; LPCSTR _lpa; _lpa + #define USES_CONVERSION int _convert; (void)_convert; UINT _acp = GetACP(); (void)_acp; LPCWSTR _lpw; (void)_lpw; LPCSTR _lpa; (void)_lpa #else - #define USES_CONVERSION int _convert = 0; _convert; UINT _acp = GetACP(); _acp; LPCWSTR _lpw = NULL; _lpw; LPCSTR _lpa = NULL; _lpa + #define USES_CONVERSION int _convert = 0; (void)_convert; UINT _acp = GetACP(); (void)_acp; LPCWSTR _lpw = NULL; (void)_lpw; LPCSTR _lpa = NULL; (void)_lpa #endif #else #ifndef _DEBUG - #define USES_CONVERSION int _convert; _convert; UINT _acp = CP_ACP; _acp; LPCWSTR _lpw; _lpw; LPCSTR _lpa; _lpa + #define USES_CONVERSION int _convert; (void)_convert; UINT _acp = CP_ACP; (void)_acp; LPCWSTR _lpw; (void)_lpw; LPCSTR _lpa; (void)_lpa #else - #define USES_CONVERSION int _convert = 0; _convert; UINT _acp = CP_ACP; _acp; LPCWSTR _lpw = NULL; _lpw; LPCSTR _lpa = NULL; _lpa + #define USES_CONVERSION int _convert = 0; (void)_convert; UINT _acp = CP_ACP; (void)_acp; LPCWSTR _lpw = NULL; (void)_lpw; LPCSTR _lpa = NULL; (void)_lpa #endif #endif --- include/atl/atlctl.h.orig 2005-04-14 17:54:32.000000000 +0900 +++ include/atl/atlctl.h 2009-04-19 13:31:15.146000000 +0900 @@ -10,6 +10,9 @@ #ifndef __ATLCTL_H__ #define __ATLCTL_H__ +#if __GNUC__ >=3 +#pragma GCC system_header +#endif #ifndef __cplusplus #error ATL requires C++ compilation (use a .cpp suffix) @@ -57,7 +60,7 @@ namespace ATL { -#pragma pack(push, _ATL_PACKING) +#pragma pack(push, 8) // Forward declarations // @@ -142,7 +145,9 @@ CComControlBase(HWND& h) : m_hWndCD(h) { memset(this, 0, sizeof(CComControlBase)); - m_phWndCD = &h; + // previous element of m_hWndCD in this class is m_rcPos + *reinterpret_cast(reinterpret_cast(reinterpret_cast(&m_rcPos)+sizeof(m_rcPos)+(__alignof__(m_hWndCD)-1))&(-(__alignof__(m_hWndCD))))=&h; +// m_phWndCD = &h; m_sizeExtent.cx = 2*2540; m_sizeExtent.cy = 2*2540; m_sizeNatural = m_sizeExtent; @@ -530,13 +535,13 @@ SIZE m_sizeNatural; //unscaled size in himetric SIZE m_sizeExtent; //current extents in himetric RECT m_rcPos; // position in pixels -#pragma warning(disable: 4510 4610) // unnamed union - union - { +//#pragma warning(disable: 4510 4610) // unnamed union +// union +// { HWND& m_hWndCD; - HWND* m_phWndCD; - }; -#pragma warning(default: 4510 4610) +// HWND* m_phWndCD; +// }; +//#pragma warning(default: 4510 4610) union { // m_nFreezeEvents is the only one actually used @@ -1362,7 +1367,7 @@ class ATL_NO_VTABLE CComControl : public CComControlBase, public WinBase { public: - CComControl() : CComControlBase(m_hWnd) {} + CComControl() : CComControlBase(this->m_hWnd) {} HRESULT FireOnRequestEdit(DISPID dispID) { T* pT = static_cast(this); @@ -1401,6 +1406,8 @@ class CComCompositeControl : public CComControl< T, CAxDialogImpl< T > > { public: + using CComControl< T, CAxDialogImpl< T > >::m_hWnd; + using CComControl< T, CAxDialogImpl< T > >::GetNextDlgTabItem; CComCompositeControl() { m_hbrBackground = NULL; @@ -1429,7 +1436,7 @@ m_hbrBackground = NULL; } OLE_COLOR clr; - HRESULT hr = GetAmbientBackColor(clr); + HRESULT hr = this->GetAmbientBackColor(clr); if (SUCCEEDED(hr)) { COLORREF rgb; @@ -1443,7 +1450,7 @@ { CAxWindow wnd(hwnd); CComPtr spDispatch; - wnd.QueryHost(&spDispatch); + wnd.QueryHost(IID_IAxWinAmbientDispatch, (void**)&spDispatch); if (spDispatch != NULL) spDispatch->put_BackColor((OLE_COLOR)l); return TRUE; @@ -1458,10 +1465,10 @@ } HWND Create(HWND hWndParent, RECT& /*rcPos*/, LPARAM dwInitParam = NULL) { - CComControl< T, CAxDialogImpl< T > >::Create(hWndParent, dwInitParam); + this->Create(hWndParent, dwInitParam); SetBackgroundColorFromAmbient(); if (m_hWnd != NULL) - ShowWindow(SW_SHOWNOACTIVATE); + this->ShowWindow(SW_SHOWNOACTIVATE); return m_hWnd; } BOOL CalcExtent(SIZE& size) @@ -1488,7 +1495,7 @@ return FALSE; // find a direct child of the dialog from the window that has focus HWND hWndCtl = ::GetFocus(); - if (IsChild(hWndCtl) && ::GetParent(hWndCtl) != m_hWnd) + if (this->IsChild(hWndCtl) && ::GetParent(hWndCtl) != m_hWnd) { do { @@ -1546,7 +1553,7 @@ break; } - return IsDialogMessage(pMsg); + return this->IsDialogMessage(pMsg); } HRESULT IOleInPlaceObject_InPlaceDeactivate(void) { @@ -1563,7 +1570,7 @@ } virtual HRESULT OnDraw(ATL_DRAWINFO& di) { - if(!m_bInPlaceActive) + if(!this->m_bInPlaceActive) { HPEN hPen = (HPEN)::GetStockObject(BLACK_PEN); HBRUSH hBrush = (HBRUSH)::GetStockObject(GRAY_BRUSH); @@ -1626,7 +1633,7 @@ } STDMETHOD(OnAmbientPropertyChange)(DISPID dispid) { - dispid; + (void)dispid; ATLTRACE2(atlTraceControls,2,_T("IOleControlImpl::OnAmbientPropertyChange\n")); ATLTRACE2(atlTraceControls,2,_T(" -- DISPID = %d (%d)\n"), dispid); return S_OK; @@ -2905,7 +2912,7 @@ ATLTRACE2(atlTraceControls,2,_T("~CBindStatusCallback\n")); } - STDMETHOD(OnStartBinding)(DWORD dwReserved, IBinding *pBinding) + STDMETHOD(OnStartBinding)(DWORD /*dwReserved*/, IBinding *pBinding) { ATLTRACE2(atlTraceControls,2,_T("CBindStatusCallback::OnStartBinding\n")); m_spBinding = pBinding; @@ -2923,19 +2930,19 @@ return S_OK; } - STDMETHOD(OnLowResource)(DWORD reserved) + STDMETHOD(OnLowResource)(DWORD /*reserved*/) { ATLTRACE2(atlTraceControls,2,_T("CBindStatusCallback::OnLowResource")); return S_OK; } - STDMETHOD(OnProgress)(ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) + STDMETHOD(OnProgress)(ULONG /*ulProgress*/, ULONG /*ulProgressMax*/, ULONG /*ulStatusCode*/, LPCWSTR /*szStatusText*/) { ATLTRACE2(atlTraceControls,2,_T("CBindStatusCallback::OnProgress")); return S_OK; } - STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR szError) + STDMETHOD(OnStopBinding)(HRESULT /*hresult*/, LPCWSTR /*szError*/) { ATLTRACE2(atlTraceControls,2,_T("CBindStatusCallback::OnStopBinding\n")); (m_pT->*m_pFunc)(this, NULL, 0); @@ -2962,7 +2969,7 @@ return S_OK; } - STDMETHOD(OnDataAvailable)(DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed) + STDMETHOD(OnDataAvailable)(DWORD grfBSCF, DWORD dwSize, FORMATETC */*pformatetc*/, STGMEDIUM *pstgmed) { ATLTRACE2(atlTraceControls,2,_T("CBindStatusCallback::OnDataAvailable\n")); HRESULT hr = S_OK; @@ -3005,7 +3012,7 @@ return hr; } - STDMETHOD(OnObjectAvailable)(REFIID riid, IUnknown *punk) + STDMETHOD(OnObjectAvailable)(REFIID /*riid*/, IUnknown */*punk*/) { ATLTRACE2(atlTraceControls,2,_T("CBindStatusCallback::OnObjectAvailable")); return S_OK; --- include/atl/atlwin.h.orig 2005-04-14 17:54:32.000000000 +0900 +++ include/atl/atlwin.h 2007-12-31 07:29:28.525375000 +0900 @@ -10,6 +10,9 @@ #ifndef __ATLWIN_H__ #define __ATLWIN_H__ +#if __GNUC__ >=3 +#pragma GCC system_header +#endif #ifndef __cplusplus #error ATL requires C++ compilation (use a .cpp suffix) @@ -99,6 +102,8 @@ #else #define CWndClassInfo CWndClassInfoA #endif +template class CWinTraits; +typedef CWinTraits CControlWinTraits; template class CWindowImpl; template class CDialogImpl; #ifndef _ATL_NO_HOSTING @@ -658,6 +663,13 @@ ATLASSERT(::IsWindow(m_hWnd)); return ::GetDlgItemText(m_hWnd, nID, lpStr, nMaxCount); } + + HWND GetDlgItem(int nID) const + { + ATLASSERT(::IsWindow(m_hWnd)); + return ::GetDlgItem(m_hWnd, nID); + } + BOOL GetDlgItemText(int nID, BSTR& bstrText) const { ATLASSERT(::IsWindow(m_hWnd)); @@ -847,12 +859,6 @@ return (int)::SetWindowLong(m_hWnd, GWL_ID, nID); } - HWND GetDlgItem(int nID) const - { - ATLASSERT(::IsWindow(m_hWnd)); - return ::GetDlgItem(m_hWnd, nID); - } - // Alert Functions BOOL FlashWindow(BOOL bInvert) @@ -1319,7 +1325,9 @@ } }; -_declspec(selectany) RECT CWindow::rcDefault = { CW_USEDEFAULT, CW_USEDEFAULT, 0, 0 }; +#ifdef _INIT_ATL_COMMON_VARS +RECT CWindow::rcDefault = { CW_USEDEFAULT, CW_USEDEFAULT, 0, 0 }; +#endif ///////////////////////////////////////////////////////////////////////////// // CAxWindow - client side for an ActiveX host window @@ -1330,6 +1338,7 @@ class CAxWindowT : public TBase { public: + using TBase::m_hWnd; // Constructors CAxWindowT(HWND hWnd = NULL) : TBase(hWnd) { } @@ -1439,11 +1448,13 @@ hr = spUnk->QueryInterface(iid, ppUnk); return hr; } +#if 0 template HRESULT QueryHost(Q** ppUnk) { return QueryHost(__uuidof(Q), (void**)ppUnk); } +#endif HRESULT QueryControl(REFIID iid, void** ppUnk) { ATLASSERT(ppUnk != NULL); @@ -1459,11 +1470,13 @@ hr = spUnk->QueryInterface(iid, ppUnk); return hr; } +#if 0 template HRESULT QueryControl(Q** ppUnk) { return QueryControl(__uuidof(Q), (void**)ppUnk); } +#endif HRESULT SetExternalDispatch(IDispatch* pDisp) { HRESULT hr; @@ -1521,12 +1534,12 @@ BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = 0) \ { \ BOOL bHandled = TRUE; \ - hWnd; \ - uMsg; \ - wParam; \ - lParam; \ - lResult; \ - bHandled; \ + (void)hWnd; \ + (void)uMsg; \ + (void)wParam; \ + (void)lParam; \ + (void)lResult; \ + (void)bHandled; \ switch(dwMsgMapID) \ { \ case 0: @@ -1750,7 +1763,7 @@ // search for an empty one - for(i = 0; i < m_aChainEntry.GetSize(); i++) + for(int i = 0; i < m_aChainEntry.GetSize(); i++) { if(m_aChainEntry[i] == NULL) { @@ -1841,7 +1854,7 @@ ///////////////////////////////////////////////////////////////////////////// // CWinTraits - Defines various default values for a window -template +template class CWinTraits { public: @@ -1855,7 +1868,7 @@ } }; -typedef CWinTraits CControlWinTraits; +//typedef CWinTraits CControlWinTraits; typedef CWinTraits CFrameWinTraits; typedef CWinTraits CMDIChildWinTraits; @@ -1882,6 +1895,7 @@ class ATL_NO_VTABLE CWindowImplRoot : public TBase, public CMessageMap { public: + using TBase::GetDlgItem; CWndProcThunk m_thunk; const MSG* m_pCurrentMsg; @@ -1892,7 +1906,7 @@ ~CWindowImplRoot() { #ifdef _DEBUG - if(m_hWnd != NULL) // should be cleared in WindowProc + if(this->m_hWnd != NULL) // should be cleared in WindowProc { ATLTRACE2(atlTraceWindowing, 0, _T("ERROR - Object deleted before window was destroyed\n")); ATLASSERT(FALSE); @@ -2017,6 +2031,8 @@ class ATL_NO_VTABLE CWindowImplBaseT : public CWindowImplRoot< TBase > { public: + using CWindowImplRoot< TBase >::m_hWnd; + using CWindowImplRoot< TBase >::m_thunk; WNDPROC m_pfnSuperWindowProc; CWindowImplBaseT() : m_pfnSuperWindowProc(::DefWindowProc) @@ -2049,7 +2065,7 @@ LRESULT DefWindowProc() { - const MSG* pMsg = m_pCurrentMsg; + const MSG* pMsg = this->m_pCurrentMsg; LRESULT lRes = 0; if (pMsg != NULL) lRes = DefWindowProc(pMsg->message, pMsg->wParam, pMsg->lParam); @@ -2091,7 +2107,7 @@ if(pOldProc != StartWindowProc) ATLTRACE2(atlTraceWindowing, 0, _T("Subclassing through a hook discarded.\n")); #else - pOldProc; // avoid unused warning + (void)pOldProc; // avoid unused warning #endif return pProc(hWnd, uMsg, wParam, lParam); } @@ -2219,6 +2235,7 @@ class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT< TBase, TWinTraits > { public: + using CWindowImplBaseT< TBase, TWinTraits >::StartWindowProc; DECLARE_WND_CLASS(NULL) HWND Create(HWND hWndParent, RECT& rcPos, LPCTSTR szWindowName = NULL, @@ -2226,8 +2243,8 @@ UINT nID = 0, LPVOID lpCreateParam = NULL) { if (T::GetWndClassInfo().m_lpszOrigName == NULL) - T::GetWndClassInfo().m_lpszOrigName = GetWndClassName(); - ATOM atom = T::GetWndClassInfo().Register(&m_pfnSuperWindowProc); + T::GetWndClassInfo().m_lpszOrigName = this->GetWndClassName(); + ATOM atom = T::GetWndClassInfo().Register(&(this->m_pfnSuperWindowProc)); dwStyle = T::GetWndStyle(dwStyle); dwExStyle = T::GetWndExStyle(dwExStyle); @@ -2244,6 +2261,7 @@ class ATL_NO_VTABLE CDialogImplBaseT : public CWindowImplRoot< TBase > { public: + using CWindowImplRoot< TBase >::m_hWnd; virtual DLGPROC GetDialogProc() { return DialogProc; @@ -2344,6 +2362,9 @@ class ATL_NO_VTABLE CDialogImpl : public CDialogImplBaseT< TBase > { public: + using CDialogImplBaseT< TBase >::m_hWnd; + using CDialogImplBaseT< TBase >::m_thunk; + typedef CDialogImplBaseT< TBase > CDialogImplBase_Class; #ifdef _DEBUG bool m_bModal; CDialogImpl() : m_bModal(false) { } @@ -2422,6 +2443,8 @@ class ATL_NO_VTABLE CAxDialogImpl : public CDialogImplBaseT< TBase > { public: + using CDialogImplBaseT< TBase >::m_hWnd; + using CDialogImplBaseT< TBase >::m_thunk; #ifdef _DEBUG bool m_bModal; CAxDialogImpl() : m_bModal(false) { } @@ -2515,6 +2538,8 @@ class CContainedWindowT : public TBase { public: + using TBase::m_hWnd; + using TBase::GetWndClassName; CWndProcThunk m_thunk; LPCTSTR m_lpszClassName; WNDPROC m_pfnSuperWindowProc; @@ -2536,7 +2561,7 @@ { } CContainedWindowT(CMessageMap* pObject, DWORD dwMsgMapID = 0) - : m_lpszClassName(TBase::GetWndClassName()), + : m_lpszClassName(GetWndClassName()), m_pfnSuperWindowProc(::DefWindowProc), m_pObject(pObject), m_dwMsgMapID(dwMsgMapID), m_pCurrentMsg(NULL) @@ -2666,7 +2691,7 @@ LPCTSTR szWindowName = NULL, DWORD dwStyle = 0, DWORD dwExStyle = 0, UINT nID = 0, LPVOID lpCreateParam = NULL) { - m_lpszClassName = TBase::GetWndClassName(); + m_lpszClassName = GetWndClassName(); m_pfnSuperWindowProc = ::DefWindowProc; m_pObject = pObject; m_dwMsgMapID = dwMsgMapID; @@ -2959,8 +2984,11 @@ { ::EnterCriticalSection(&pM->m_csWindowCreate); - __try + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, &pM->m_csWindowCreate, EXCEPTION_CONTINUE_SEARCH, NULL, atlfinalleavecriticalsection); if(p->m_atom == 0) { HINSTANCE hInst = pM->m_hInst; @@ -2979,7 +3007,7 @@ if(!::GetClassInfoExA(_Module.GetModuleInstance(), p->m_lpszOrigName, &wc)) { fFail = TRUE; - __leave; + __builtin_longjmp(_sejmpbuf, 1); } } memcpy(&p->m_wc, &wc, sizeof(WNDCLASSEX)); @@ -3011,10 +3039,7 @@ p->m_atom = ::RegisterClassExA(&p->m_wc); } } - __finally - { - ::LeaveCriticalSection(&pM->m_csWindowCreate); - } + _sehandler.Reset(); } if (fFail) @@ -3038,8 +3063,11 @@ if (p->m_atom == 0) { ::EnterCriticalSection(&pM->m_csWindowCreate); - __try + jmp_buf _sejmpbuf; + __SEHandler _sehandler; + if (__builtin_setjmp(_sejmpbuf) == 0) { + _sehandler.Set(_sejmpbuf, &pM->m_csWindowCreate, EXCEPTION_CONTINUE_SEARCH, NULL, atlfinalleavecriticalsection); if(p->m_atom == 0) { HINSTANCE hInst = pM->m_hInst; @@ -3058,7 +3086,7 @@ if(!::GetClassInfoExW(_Module.GetModuleInstance(), p->m_lpszOrigName, &wc)) { fFail = TRUE; - __leave; + __builtin_longjmp(_sejmpbuf, -1); } } memcpy(&p->m_wc, &wc, sizeof(WNDCLASSEX)); @@ -3090,10 +3118,7 @@ p->m_atom = ::RegisterClassExW(&p->m_wc); } } - __finally - { - ::LeaveCriticalSection(&pM->m_csWindowCreate); - } + _sehandler.Reset(); } if (fFail) --- include/atl/statreg.h.orig 2005-04-14 17:54:34.000000000 +0900 +++ include/atl/statreg.h 2006-09-18 20:05:01.468750000 +0900 @@ -573,15 +573,16 @@ return hRes; } -__declspec(selectany) LPCTSTR CRegParser::rgszNeverDelete[] = //Component Categories +#ifdef _INIT_ATL_COMMON_VARS +LPCTSTR CRegParser::rgszNeverDelete[] = //Component Categories { _T("CLSID"), _T("TYPELIB") }; -__declspec(selectany) const int CRegParser::cbNeverDelete = sizeof(rgszNeverDelete) / sizeof(LPCTSTR*); -__declspec(selectany) const int CRegParser::MAX_VALUE=4096; -__declspec(selectany) const int CRegParser::MAX_TYPE=MAX_VALUE; - +const int CRegParser::cbNeverDelete = sizeof(rgszNeverDelete) / sizeof(LPCTSTR*); +const int CRegParser::MAX_VALUE=4096; +const int CRegParser::MAX_TYPE=MAX_VALUE; +#endif inline BOOL CRegParser::VTFromRegType(LPCTSTR szValueType, VARTYPE& vt) {