[commit] r2746 - in trunk/GME: Core Gme Meta Mga

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Mon Apr 9 15:34:42 CDT 2018


Author: ksmyth
Date: Mon Apr  9 15:34:42 2018
New Revision: 2746

Log:
Some _ATL_DEBUG_INTERFACES fixes

Modified:
   trunk/GME/Core/CoreBinFile.h
   trunk/GME/Core/CoreObject.h
   trunk/GME/Core/StdAfx.h
   trunk/GME/Gme/GMEView.cpp
   trunk/GME/Meta/MgaMetaBase.cpp
   trunk/GME/Mga/MgaFCO.cpp
   trunk/GME/Mga/MgaFCO.h
   trunk/GME/Mga/MgaFolder.cpp

Modified: trunk/GME/Core/CoreBinFile.h
==============================================================================
--- trunk/GME/Core/CoreBinFile.h	Wed Feb 21 11:53:38 2018	(r2745)
+++ trunk/GME/Core/CoreBinFile.h	Mon Apr  9 15:34:42 2018	(r2746)
@@ -611,7 +611,14 @@
 			Get(binfile, &p);
 		}
 
+#ifdef _ATL_DEBUG_INTERFACES
+		IUnknown* pUnk = dict.p;
+		while (IsQIThunk(pUnk))
+			pUnk = ((ATL::_QIThunk *)(pUnk))->m_pUnk;
+		const CCoreDictionaryAttributeValue* cdict = (const CCoreDictionaryAttributeValue*)(const ICoreDictionaryAttributeValue*)pUnk;
+#else
 		const CCoreDictionaryAttributeValue* cdict = (const CCoreDictionaryAttributeValue*)(const ICoreDictionaryAttributeValue*)dict;
+#endif
 		for (auto it = cdict->m_dict.begin(); it != cdict->m_dict.end(); it++) {
 			size += sizeof(int);
 			size += it->first.Length() * sizeof(wchar_t);

Modified: trunk/GME/Core/CoreObject.h
==============================================================================
--- trunk/GME/Core/CoreObject.h	Wed Feb 21 11:53:38 2018	(r2745)
+++ trunk/GME/Core/CoreObject.h	Mon Apr  9 15:34:42 2018	(r2746)
@@ -184,13 +184,11 @@
 	return pUnk;
 }
 
-bool IsQIThunk(IUnknown *p);
-
 inline CCoreObject *CastToObject(IUnknown *p) {
-	if (IsQIThunk(p))
-		return (CCoreObject*)(ICoreObject*)((ATL::_QIThunk *)(p))->m_pUnk;
-	else
-		return (CCoreObject*)(ICoreObject*)p;
+	while (IsQIThunk(p)) {
+		p = ((ATL::_QIThunk *)(p))->m_pUnk;
+	}
+	return (CCoreObject*)(ICoreObject*)p;
 }
 #endif
 

Modified: trunk/GME/Core/StdAfx.h
==============================================================================
--- trunk/GME/Core/StdAfx.h	Wed Feb 21 11:53:38 2018	(r2745)
+++ trunk/GME/Core/StdAfx.h	Mon Apr  9 15:34:42 2018	(r2746)
@@ -64,6 +64,9 @@
 extern CComModule _Module;
 #include <atlcom.h>
 
+#ifdef _ATL_DEBUG_INTERFACES
+bool IsQIThunk(IUnknown *p);
+#endif
 
 #define _NOTHREADS
 

Modified: trunk/GME/Gme/GMEView.cpp
==============================================================================
--- trunk/GME/Gme/GMEView.cpp	Wed Feb 21 11:53:38 2018	(r2745)
+++ trunk/GME/Gme/GMEView.cpp	Mon Apr  9 15:34:42 2018	(r2746)
@@ -6836,18 +6836,18 @@
 				ASSERT(FALSE);
 				break;
 			}
-			return true;
+			return TRUE;
 		}
 		else if(nCode == CN_UPDATE_COMMAND_UI && pExtra != NULL) {
 			CCmdUI *pUI = (CCmdUI *)pExtra;
 			pUI->Enable(isType);
-			return true;
+			return TRUE;
 		}
 	} else if (nID >= DECORATOR_CTX_MENU_MINID && nID < DECORATOR_CTX_MENU_MAXID && CGuiMetaProject::theInstance->maxMenuCmdID < DECORATOR_CTX_MENU_MINID) {
 		if (nCode == CN_UPDATE_COMMAND_UI && pExtra != NULL) {
 			CCmdUI* pUI = (CCmdUI*) pExtra;
 			pUI->Enable(isType);
-			return true;
+			return TRUE;
 		} else if (nCode == CN_COMMAND) {
 			if (selectedObjectOfContext != NULL || selectedAnnotationOfContext != NULL) {
 				// Send command using saved state

Modified: trunk/GME/Meta/MgaMetaBase.cpp
==============================================================================
--- trunk/GME/Meta/MgaMetaBase.cpp	Wed Feb 21 11:53:38 2018	(r2745)
+++ trunk/GME/Meta/MgaMetaBase.cpp	Mon Apr  9 15:34:42 2018	(r2746)
@@ -32,6 +32,14 @@
     } COMCATCH(;)
 }
 
+#ifdef _ATL_DEBUG_INTERFACES
+static bool IsQIThunk(IUnknown *p) {
+	ATL::_QIThunk dummy((IUnknown*)(void*)1, L"dummy", IID_IUnknown, 0, false);
+
+	return *((int**)(void*)p) == *((int**)(void*)&dummy);
+}
+#endif
+
 void CMgaMetaBase::Traverse(CMgaMetaProject *metaproject, CCoreObjectPtr &me)
 {
 	ASSERT( metaproject != NULL );
@@ -45,6 +53,8 @@
 
 #ifdef _ATL_DEBUG_INTERFACES
 	IUnknown* pUnk = ((ATL::_QIThunk *)(ibase.p))->m_pUnk;
+	while (IsQIThunk(pUnk))
+		pUnk = ((ATL::_QIThunk *)(pUnk))->m_pUnk;
 	CMgaMetaBase *base = (CMgaMetaBase *)(IMgaMetaBase*)(pUnk);
 #else
 	CMgaMetaBase *base = static_cast<CMgaMetaBase*>((IMgaMetaBase*)ibase);

Modified: trunk/GME/Mga/MgaFCO.cpp
==============================================================================
--- trunk/GME/Mga/MgaFCO.cpp	Wed Feb 21 11:53:38 2018	(r2745)
+++ trunk/GME/Mga/MgaFCO.cpp	Mon Apr  9 15:34:42 2018	(r2746)
@@ -23,11 +23,13 @@
 
 STDMETHODIMP FCO::FinalConstruct() {
 	COMTRY {
+#ifndef _ATL_DEBUG_INTERFACES
 			{
 				CoreObj myself;
 				QueryInterface(__uuidof(ICoreObject),(void **)&myself);
 				self = myself;  // self does not hold reference!!!
 			}
+#endif
 			CComPtr<ICoreProject> cp;
 			COMTHROW(self->get_Project(&cp));
 #ifdef _ATL_DEBUG_INTERFACES

Modified: trunk/GME/Mga/MgaFCO.h
==============================================================================
--- trunk/GME/Mga/MgaFCO.h	Wed Feb 21 11:53:38 2018	(r2745)
+++ trunk/GME/Mga/MgaFCO.h	Mon Apr  9 15:34:42 2018	(r2746)
@@ -327,11 +327,21 @@
 	void PreDeleteNotify();
 
 public:
+#ifndef _ATL_DEBUG_INTERFACES
 	class NoAddRefCoreObj : public CoreObj {	// CoreObj, but non-addref/release-ing
 	public:
 		void operator=(CoreObj &p) { Attach(p); } 
 	   ~NoAddRefCoreObj() { Detach(); }
 	}  self;
+#else
+	CoreObj get_self()
+	{
+		CoreObj myself;
+		QueryInterface(__uuidof(ICoreObject), (void **)&myself);
+		return myself;
+	}
+	__declspec(property(get = get_self)) CoreObj self;
+#endif
 
 	typedef stdext::hash_map<CMgaTerritory*, CMgaAtom*, terr_hashfunc> pubfcohash;
 	pubfcohash pubfcos;

Modified: trunk/GME/Mga/MgaFolder.cpp
==============================================================================
--- trunk/GME/Mga/MgaFolder.cpp	Wed Feb 21 11:53:38 2018	(r2745)
+++ trunk/GME/Mga/MgaFolder.cpp	Mon Apr  9 15:34:42 2018	(r2746)
@@ -966,7 +966,9 @@
 				{ ITERATE_THROUGH(self[ATTRID_XREF+ATTRID_REFERENCE]) ITER[ATTRID_REFERENCE] = nnode; }
 				COMTHROW(self->Delete());
 /* this has to be fixed!!!! */ ASSERT(false);
+#ifndef _ATL_DEBUG_INTERFACES
 				self = nnode;
+#endif
 			}
 			metaref_type mr;
 			COMTHROW(newkind->get_MetaRef(&mr));
@@ -978,7 +980,11 @@
 			else mr = METAREF_NULL;
 			self[ATTRID_ROLEMETA] = mr;
 
-		} COMCATCH_IN_TRANSACTION( self = selfsave;);
+#ifndef _ATL_DEBUG_INTERFACES
+		} COMCATCH_IN_TRANSACTION(self = selfsave;);
+#else
+		} COMCATCH_IN_TRANSACTION(;);
+#endif
 }
 
 HRESULT FCO::GetSourceControlInfo( long* p_scInfo)


More information about the gme-commit mailing list