[commit] r2287 - in trunk/GME: Mga MgaUtil

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Thu Aug 15 10:55:40 CDT 2013


Author: ksmyth
Date: Thu Aug 15 10:55:39 2013
New Revision: 2287

Log:
Better error message for MgaProject::Open version mismatch

Modified:
   trunk/GME/Mga/MgaProject.cpp
   trunk/GME/MgaUtil/MgaRegistrar.cpp

Modified: trunk/GME/Mga/MgaProject.cpp
==============================================================================
--- trunk/GME/Mga/MgaProject.cpp	Wed Aug 14 14:24:40 2013	(r2286)
+++ trunk/GME/Mga/MgaProject.cpp	Thu Aug 15 10:55:39 2013	(r2287)
@@ -145,9 +145,17 @@
 		CComPtr<IMgaRegistrar> mgareg;
 		COMTHROW(mgareg.CoCreateInstance(OLESTR("Mga.MgaRegistrar")));
 		CComBSTR connstr;
-		COMTHROW(EDEF(mgareg->QueryParadigm(s, &connstr, pGUID, REGACCESS_PRIORITY), E_MGA_PARADIGM_NOTREG));
+		{
+			HRESULT hr = mgareg->QueryParadigm(s, &connstr, pGUID, REGACCESS_PRIORITY);
+			if (FAILED(hr))
+			{
+				CComPtr<IErrorInfo> info;
+				GetErrorInfo(0, &info);
+				throw _com_error(E_MGA_PARADIGM_NOTREG, info, true);
+			}
+		}
 		ASSERT(connstr);
-		COMTHROW(metapr.CoCreateInstance(	OLESTR("Mga.MgaMetaProject")));
+		COMTHROW(metapr.CoCreateInstance(OLESTR("Mga.MgaMetaProject")));
 		COMTHROW(EDEF(metapr->Open(connstr), E_MGA_PARADIGM_NOTREG));
 		CComVariant metaGUID;
 		COMTHROW(metapr->get_GUID(&metaGUID));
@@ -163,9 +171,19 @@
 		{
 			CComPtr<IMgaRegistrar> mgareg;
 			COMTHROW(mgareg.CoCreateInstance(OLESTR("Mga.MgaRegistrar")));
-			COMTHROW(EDEF(mgareg->GUIDFromVersion(s, ver, &vguid, REGACCESS_PRIORITY), E_MGA_PARADIGM_NOTREG));
+			{
+				HRESULT hr = mgareg->GUIDFromVersion(s, ver, &vguid, REGACCESS_PRIORITY);
+				if (FAILED(hr))
+				{
+					CComPtr<IErrorInfo> info;
+					GetErrorInfo(0, &info);
+					throw _com_error(E_MGA_PARADIGM_NOTREG, info, true);
+				}
+			}
 		}
-		COMTHROW(OpenParadigm(s,&vguid));
+		HRESULT hr =  OpenParadigm(s,&vguid);
+		if (FAILED(hr))
+			return hr;
 	} COMCATCH(;);
 }
 
@@ -412,12 +430,19 @@
 		}
 
 		if(s.Length()) {
+			HRESULT hr;
 			if (ver.Length()) {
 				// Version string has precedence
-				COMTHROW(OpenParadigm(s,ver));
+				hr = OpenParadigm(s,ver);
 			}
 			else {
-				COMTHROW(OpenParadigm(s,&pGUID));
+				hr = OpenParadigm(s,&pGUID);
+			}
+			if (FAILED(hr))
+			{
+				CComPtr<IErrorInfo> info;
+				GetErrorInfo(0, &info);
+				throw _com_error(hr, info, true);
 			}
 		}
 		else COMTHROW(E_MGA_MODULE_INCOMPATIBILITY);

Modified: trunk/GME/MgaUtil/MgaRegistrar.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaRegistrar.cpp	Wed Aug 14 14:24:40 2013	(r2286)
+++ trunk/GME/MgaUtil/MgaRegistrar.cpp	Thu Aug 15 10:55:39 2013	(r2287)
@@ -1473,12 +1473,12 @@
 			CRegKey par;
 			res = par.Open(HKEY_CURRENT_USER, rootreg + _T("\\Paradigms\\") + pname, KEY_READ);
 			if(res == ERROR_SUCCESS) {
-				// REVOKE_SYS2(mode);						// paradigm found, ignore system settings
 				if(inguidstr == NULL) {
 					guidact = QueryValue(par, _T("CurrentVersion"));
 					if(guidact.IsEmpty()) res = ERROR_FILE_NOT_FOUND;
 				}
-				else	guidact = inguidstr;
+				else
+					guidact = inguidstr;
 			}
 			if(res == ERROR_SUCCESS) res = subk.Open(par, guidact, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
@@ -1490,20 +1490,33 @@
 			res = par.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Paradigms\\") + pname, KEY_READ | KEY_WOW64_32KEY);
 			if(res == ERROR_SUCCESS) {
 				CString cur = QueryValue(par, _T("CurrentVersion"));
-				if(cur.IsEmpty()) {
+				if (cur.IsEmpty() && inguidstr == NULL) {
 					guidact = QueryValue(par, _T("GUID"));
-					if(inguidstr != NULL && inguidstr != CComBSTR(guidact)) COMTHROW(E_NOTFOUND);
+					if (inguidstr != NULL && inguidstr != CComBSTR(guidact))
+						COMTHROW(E_NOTFOUND);
 					subk.Attach(par.Detach());
 				}
 				else {
-					if(inguidstr == NULL) guidact = cur;
-					else	guidact = inguidstr;
+					if (inguidstr == NULL)
+						guidact = cur;
+					else
+						guidact = inguidstr;
 					res = subk.Open(par, guidact, KEY_READ);
-					if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
+					if (res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND)
+						ERRTHROW(res);
 				}
 			}
 		}
-		if(subk == NULL) return(E_NOTFOUND);  // !!!!!!!
+		if (subk == NULL)
+		{
+			CString error;
+			if (inguidstr)
+				error.Format(L"Paradigm '%s' with GUID '%s' is not registered.", pname, inguidstr);
+			else
+				error.Format(L"Paradigm '%s' is not registered.", pname);
+			SetErrorInfo(error);
+			return E_NOTFOUND;
+		}
 
 
 		CopyTo(QueryValue(subk, _T("ConnStr")), connstr);
@@ -1646,7 +1659,13 @@
 		}
 
 		if (gstr.IsEmpty()) {
-			ERRTHROW(E_NOTFOUND);
+			CString error;
+			if (SysStringLen(ver))
+				error.Format(L"Paradigm '%s' with version '%s' is not registered.", name, ver);
+			else
+				error.Format(L"Paradigm '%s' is not registered.", name);
+			SetErrorInfo(error);
+			return E_NOTFOUND;
 		}
 
 		GUID g;


More information about the gme-commit mailing list