| --- 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 <excpt.h> |
| + |
| +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 <class T, const IID* piid = &__uuidof(T)> |
| +template <class T, const IID* piid> |
| 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 <class Q> |
| 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<HRESULT*>(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<CVirtualBuffer *>(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 <class Q> |
| 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<LPCRITICAL_SECTION>(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 <algorithm> |
| +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 <class Q> |
| HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp) |
| { |
| return QueryInterface(__uuidof(Q), (void**)pp); |
| } |
| +#endif |
| |
| static HRESULT WINAPI CreateInstance(CComObject<Base>** 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 <class Q> |
| 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<contained::_ThreadModel::ThreadModelNoCS>::FinalConstruct(); |
| + CComObjectRootEx<typename contained::_ThreadModel::ThreadModelNoCS>::FinalConstruct(); |
| return m_contained.FinalConstruct(); |
| } |
| void FinalRelease() |
| { |
| - CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>::FinalRelease(); |
| + CComObjectRootEx<typename contained::_ThreadModel::ThreadModelNoCS>::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 <class Q> |
| HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp) |
| { |
| return QueryInterface(__uuidof(Q), (void**)pp); |
| } |
| +#endif |
| static HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, CComAggObject<contained>** 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<contained::_ThreadModel::ThreadModelNoCS>::FinalConstruct(); |
| + this->InternalAddRef(); |
| + CComObjectRootEx<typename contained::_ThreadModel::ThreadModelNoCS>::FinalConstruct(); |
| HRESULT hr = m_contained.FinalConstruct(); |
| - InternalRelease(); |
| + this->InternalRelease(); |
| return hr; |
| } |
| void FinalRelease() |
| { |
| - CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>::FinalRelease(); |
| + CComObjectRootEx<typename contained::_ThreadModel::ThreadModelNoCS>::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 <class Q> |
| HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp) |
| { |
| return QueryInterface(__uuidof(Q), (void**)pp); |
| } |
| +#endif |
| static HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, CComPolyObject<contained>** 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<CComObject<Base::_OwnerClass>*>(pv); |
| + m_pOwner = reinterpret_cast<CComObject<typename Base::_OwnerClass>*>(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<CComObject<contained::_OwnerClass>*>(pv); |
| + m_contained.m_pOwner = reinterpret_cast<CComObject<typename contained::_OwnerClass>*>(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<contained::_ThreadModel::ThreadModelNoCS>::FinalConstruct(); |
| + CComObjectRootEx<typename contained::_ThreadModel::ThreadModelNoCS>::FinalConstruct(); |
| return m_contained.FinalConstruct(); |
| } |
| void FinalRelease() |
| { |
| - CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>::FinalRelease(); |
| + CComObjectRootEx<typename contained::_ThreadModel::ThreadModelNoCS>::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<license> _ComMapClass; |
| + using license::IsLicenseValid; |
| + using license::GetLicenseKey; |
| +// typedef CComClassFactory2<license> _ComMapClass; |
| BEGIN_COM_MAP(CComClassFactory2<license>) |
| 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 <class Q> |
| 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<ITypeInfo> spInfo(spTypeInfo); |
| CComPtr<ITypeInfo2> 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 <class T> |
| +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<nID, pdiid> |
| { |
| public: |
| + using _IDispEventLocator<nID, pdiid>::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<nID, T, pdiid>::m_libid; |
| + using IDispEventSimpleImpl<nID, T, pdiid>::m_iid; |
| + using IDispEventSimpleImpl<nID, T, pdiid>::m_wMajorVerNum; |
| + using IDispEventSimpleImpl<nID, T, pdiid>::m_wMinorVerNum; |
| |
| IDispEventImpl() |
| { |
| @@ -4475,6 +4509,11 @@ |
| } |
| }; |
| |
| +template <class Base, const IID* piid, class T, class Copy, class ThreadModel = CComObjectThreadModel> |
| +class ATL_NO_VTABLE CComEnum; |
| +template <class Base, const IID* piid, class T, class Copy, class CollType, class ThreadModel = CComObjectThreadModel> |
| +class ATL_NO_VTABLE CComEnumOnSTL; |
| + |
| |
| ///////////////////////////////////////////////////////////////////////////// |
| // CComEnumImpl |
| @@ -4746,7 +4785,7 @@ |
| return S_OK; |
| } |
| |
| -template <class Base, const IID* piid, class T, class Copy, class ThreadModel = CComObjectThreadModel> |
| +template <class Base, const IID* piid, class T, class Copy, class ThreadModel> |
| class ATL_NO_VTABLE CComEnum : |
| public CComEnumImpl<Base, piid, T, Copy>, |
| public CComObjectRootEx< ThreadModel > |
| @@ -4868,7 +4907,7 @@ |
| return hRes; |
| } |
| |
| -template <class Base, const IID* piid, class T, class Copy, class CollType, class ThreadModel = CComObjectThreadModel> |
| +template <class Base, const IID* piid, class T, class Copy, class CollType, class ThreadModel> |
| class ATL_NO_VTABLE CComEnumOnSTL : |
| public IEnumOnSTLImpl<Base, piid, T, Copy, CollType>, |
| 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<HWND **>(reinterpret_cast<DWORD>(reinterpret_cast<char *>(&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<T*>(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<IAxWinAmbientDispatch> 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 <DWORD t_dwStyle = 0, DWORD t_dwExStyle = 0> class CWinTraits; |
| +typedef CWinTraits<WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0> CControlWinTraits; |
| template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits> class CWindowImpl; |
| template <class T, class TBase = CWindow> 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 <class Q> |
| 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 <class Q> |
| 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 <DWORD t_dwStyle = 0, DWORD t_dwExStyle = 0> |
| +template <DWORD t_dwStyle, DWORD t_dwExStyle> |
| class CWinTraits |
| { |
| public: |
| @@ -1855,7 +1868,7 @@ |
| } |
| }; |
| |
| -typedef CWinTraits<WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0> CControlWinTraits; |
| +//typedef CWinTraits<WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0> CControlWinTraits; |
| typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_APPWINDOW | WS_EX_WINDOWEDGE> CFrameWinTraits; |
| typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_MDICHILD> 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 Catagories |
| +#ifdef _INIT_ATL_COMMON_VARS |
| +LPCTSTR CRegParser::rgszNeverDelete[] = //Component Catagories |
| { |
| _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) |
| { |