[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