[commit] r2062 - in trunk/GME: Common Gme MgaUtil Parser

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Wed Sep 26 08:53:32 CDT 2012


Author: ksmyth
Date: Wed Sep 26 08:53:32 2012
New Revision: 2062

Log:
SetErrorInfo in the xme parser

Modified:
   trunk/GME/Common/CommonError.cpp
   trunk/GME/Common/CommonError.h
   trunk/GME/Gme/GMEApp.cpp
   trunk/GME/MgaUtil/MgaResolver.cpp
   trunk/GME/MgaUtil/MgaResolver.h
   trunk/GME/Parser/GenParser.cpp
   trunk/GME/Parser/MetaParser.h
   trunk/GME/Parser/MgaDumper.h
   trunk/GME/Parser/MgaParser.cpp
   trunk/GME/Parser/MgaParser.h
   trunk/GME/Parser/StdAfx.cpp
   trunk/GME/Parser/StdAfx.h

Modified: trunk/GME/Common/CommonError.cpp
==============================================================================
--- trunk/GME/Common/CommonError.cpp	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Common/CommonError.cpp	Wed Sep 26 08:53:32 2012	(r2062)
@@ -101,7 +101,7 @@
 	OLESTR("Invalid long value in XML file")
 };
 
-void SetErrorInfo(LPOLESTR desc)
+void throw_com_error(HRESULT hr, LPCOLESTR desc)
 {
 	ASSERT( desc != NULL );
 
@@ -109,7 +109,30 @@
 	{
 		CComObjPtr<ICreateErrorInfo> errorinfo;
 		COMTHROW( CreateErrorInfo(PutOut(errorinfo)) );
-		COMTHROW( errorinfo->SetDescription(desc) );
+		COMTHROW( errorinfo->SetDescription(const_cast<LPOLESTR>(desc)) );
+		COMTHROW( errorinfo->SetSource(OLESTR("GME")) );
+
+		CComObjPtr<IErrorInfo> errorinfo2;
+		COMTHROW( QueryInterface(errorinfo, errorinfo2) );
+		COMTHROW( SetErrorInfo(0, errorinfo2) );
+
+		throw _com_error(hr, errorinfo2, true);
+	}
+	catch(hresult_exception &)
+	{
+		// do nothing
+	}
+}
+
+void SetErrorInfo(LPCOLESTR desc)
+{
+	ASSERT( desc != NULL );
+
+	try
+	{
+		CComObjPtr<ICreateErrorInfo> errorinfo;
+		COMTHROW( CreateErrorInfo(PutOut(errorinfo)) );
+		COMTHROW( errorinfo->SetDescription(const_cast<LPOLESTR>(desc)) );
 		COMTHROW( errorinfo->SetSource(OLESTR("GME")) );
 
 		CComObjPtr<IErrorInfo> errorinfo2;

Modified: trunk/GME/Common/CommonError.h
==============================================================================
--- trunk/GME/Common/CommonError.h	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Common/CommonError.h	Wed Sep 26 08:53:32 2012	(r2062)
@@ -134,7 +134,9 @@
 
 // --------------------------- Common Error Codes
 
-void SetErrorInfo(LPOLESTR desc) NOTHROW;
+
+void throw_com_error(HRESULT hr, LPCOLESTR desc);
+void SetErrorInfo(LPCOLESTR desc) NOTHROW;
 void SetErrorInfo(HRESULT hr, LPOLESTR desc2 = NULL) NOTHROW;
 bool GetErrorInfo(BSTR *p) NOTHROW;
 void GetErrorInfo(HRESULT hr, BSTR *p) NOTHROW;

Modified: trunk/GME/Gme/GMEApp.cpp
==============================================================================
--- trunk/GME/Gme/GMEApp.cpp	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Gme/GMEApp.cpp	Wed Sep 26 08:53:32 2012	(r2062)
@@ -2250,7 +2250,7 @@
 		if( CMainFrame::theInstance) CMainFrame::theInstance->m_console.Message( CString( _T("Importing ")) + file_name + _T("..."), 1);
 		IMgaParser2Ptr parser2 = (IMgaParser*)parser;
 		if (parser2 && m_pMainWnd)
-			COMTHROW(parser2->ParseProject2(theApp.mgaProject,PutInBstr(fullPath), (ULONGLONG)(m_pMainWnd->GetSafeHwnd())));
+			parser2->__ParseProject2(theApp.mgaProject,_bstr_t(fullPath), (ULONGLONG)(m_pMainWnd->GetSafeHwnd()));
 		else
 			COMTHROW(parser->ParseProject(theApp.mgaProject,PutInBstr(fullPath)) );
 		

Modified: trunk/GME/MgaUtil/MgaResolver.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaResolver.cpp	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/MgaUtil/MgaResolver.cpp	Wed Sep 26 08:53:32 2012	(r2062)
@@ -5,6 +5,7 @@
 #include "MgaResolver.h"
 #include "DialogList.h"
 #include "AlterNmspDlg.h"
+#include "CommonError.h"
 
 /////////////////////////////////////////////////////////////////////////////
 
@@ -260,6 +261,7 @@
 				//		since not interactive, exit
 
 				if (! this->mb_is_interactive) {
+					SetErrorInfo(CString(L"Could not resolve folder for kind '") + kind + "'");
 					return RESOLV_ERR_get_FolderByStr;
 				}
 
@@ -283,7 +285,7 @@
 				MGACOLL_ITERATE_END;
 
 				if ((cdl.DoModal() != IDOK) || (cdl.mn_selection_index == LB_ERR)) {
-//					AfxMessageBox("no items chosen from dialog");
+					SetErrorInfo(L"No item chosen from dialog");
 					return RESOLV_ERR_get_FolderByStr;
 				}
 
@@ -304,34 +306,23 @@
 		}
 
 //		#pragma bookmark (note: insert helpful message box here get_FolderByStr[] )
-		if (this->mb_is_interactive) {
+		CComBSTR parfolder_name;
+		COMTHROW( parent->get_Name(&parfolder_name) );
 
-			CComBSTR parfolder_name;
-			COMTHROW( parent->get_Name(&parfolder_name) );
+		CComBSTR parmfolder_name;
+		COMTHROW( parent_mfolder->get_Name(&parmfolder_name) );
 
-			CComBSTR parmfolder_name;
-			COMTHROW( parent_mfolder->get_Name(&parmfolder_name) );
-
-			CString sz_format;
-			sz_format.Format(	_T("Paradigm violation!  Parent folder %s of type %s\n")
-								_T("cannot contain a child folder\n")
-								_T("of type %s"),
-								(BSTR) parfolder_name, (BSTR) parmfolder_name,
-								kind
-			);
-
-			CComPtr<IMgaProject> mgaProject;
-			COMTHROW(parent->get_Project(&mgaProject));
-			CComPtr<IGMEOLEApp> pGME = get_GME(mgaProject);
-			if (pGME) {
-				COMTHROW(pGME->ConsoleMessage(CComBSTR(sz_format), MSG_ERROR));
-			}
-			else {
-				AfxMessageBox(sz_format, MB_ICONSTOP | MB_OK);
-			}
-
-		}
+		CString sz_format;
+		sz_format.Format(	_T("Paradigm violation: parent folder %s of type %s\n")
+							_T("cannot contain a child folder\n")
+							_T("of type %s"),
+							(BSTR) parfolder_name, (BSTR) parmfolder_name,
+							kind
+		);
 
+		CComPtr<IMgaProject> mgaProject;
+		COMTHROW(parent->get_Project(&mgaProject));
+		SetErrorInfo(sz_format);
 
 		return RESOLV_ERR_get_FolderByStr;
 	
@@ -461,36 +452,23 @@
 
 		if (_fs_ct == 0) {
 //			#pragma bookmark (note: insert helpful message box here get_KindByStr[1] )
-			if (this->mb_is_interactive) {
-
-				CComBSTR parent_name;
-				COMTHROW( parent->get_Name(&parent_name) );
-
-				CComBSTR mparent_name;
-				COMTHROW( parent_mf->get_Name(&mparent_name) );
-
-				CString sz_format;
+			CComBSTR parent_name;
+			COMTHROW( parent->get_Name(&parent_name) );
 
-				sz_format.Format(	_T("%sParent folder %s\n")
-									_T("of type %s\n")
-									_T("cannot have any children."),
-									sentence,
-									(BSTR) parent_name,
-									(BSTR) mparent_name
-				);
+			CComBSTR mparent_name;
+			COMTHROW( parent_mf->get_Name(&mparent_name) );
 
-				CComPtr<IMgaProject> mgaProject;
-				COMTHROW(parent->get_Project(&mgaProject));
-				CComPtr<IGMEOLEApp> pGME = get_GME(mgaProject);
-				if (pGME) {
-					COMTHROW(pGME->ConsoleMessage(CComBSTR(sz_format), MSG_ERROR));
-				}
-				else {
-					AfxMessageBox(sz_format, MB_ICONSTOP | MB_OK);
-				}
+			CString sz_format;
 
+			sz_format.Format(	_T("%sParent folder %s\n")
+								_T("of type %s\n")
+								_T("cannot have any children."),
+								sentence,
+								(BSTR) parent_name,
+								(BSTR) mparent_name
+			);
+			SetErrorInfo(sz_format);
 
-			}
 			return RESOLV_ERR_get_KindByStr;
 		}
 
@@ -523,46 +501,34 @@
 
 		if (valid_obj_map.GetCount() == 0) {
 //			#pragma bookmark (note: insert helpful message box here get_KindByStr[1] )
-			if (this->mb_is_interactive) {
+			CComBSTR parent_name;
+			COMTHROW( parent->get_Name(&parent_name) );
 
-				CComBSTR parent_name;
-				COMTHROW( parent->get_Name(&parent_name) );
+			CComBSTR mparent_name;
+			COMTHROW( parent_mf->get_Name(&mparent_name) );
 
-				CComBSTR mparent_name;
-				COMTHROW( parent_mf->get_Name(&mparent_name) );
+			CString sz_format;
+			CString sz_format_tmp;
 
-				CString sz_format;
-				CString sz_format_tmp;
-
-				sz_format_tmp.Format(	_T("Paradigm Violation!  Parent folder %s\n")
-										_T("of type %s\n")
-										_T("cannot have any children\n"),
-										(BSTR) parent_name,
-										(BSTR) mparent_name
-				);
-				sz_format += sz_format_tmp;
+			sz_format_tmp.Format(	_T("Paradigm Violation: parent folder %s\n")
+									_T("of type %s\n")
+									_T("cannot have any children\n"),
+									(BSTR) parent_name,
+									(BSTR) mparent_name
+			);
+			sz_format += sz_format_tmp;
 
-				if (objtype != OBJTYPE_NULL) {
-					sz_format_tmp.Format(	_T("of object type %s\n"),
-											helper_ObjTypeStr(objtype)
-											);
-					sz_format += sz_format_tmp;
-				}
+			if (objtype != OBJTYPE_NULL) {
+				sz_format_tmp.Format(	_T("of object type %s\n"),
+										helper_ObjTypeStr(objtype)
+										);
+				sz_format += sz_format_tmp;
+			}
 
-				sz_format += sentence;
+			sz_format += sentence;
 
-				CComPtr<IMgaProject> mgaProject;
-				COMTHROW(parent->get_Project(&mgaProject));
-				CComPtr<IGMEOLEApp> pGME = get_GME(mgaProject);
-				if (pGME) {
-					COMTHROW(pGME->ConsoleMessage(CComBSTR(sz_format), MSG_ERROR));
-				}
-				else {
-					AfxMessageBox(sz_format, MB_ICONSTOP | MB_OK);
-				}
+			SetErrorInfo(sz_format);
 
-			
-			}
 			return RESOLV_ERR_get_KindByStr;
 		}
 
@@ -593,7 +559,10 @@
 
 			}
 			if (!this->mb_is_interactive)
+			{
+				SetErrorInfo(CString(L"Could not resolve kind '") + kind + L"'");
 				return RESOLV_ERR_get_KindByStr;
+			}
 			// update mapping
 			this->map_put_KindByStr(parent_mf.p, kind, objtype, *p);
 
@@ -605,12 +574,13 @@
 		// if not interactive, we have to quit-- no more choices!
 
 		if (!this->mb_is_interactive) {
+			SetErrorInfo(CString(L"Could not resolve kind '") + kind + L"'");
 			return RESOLV_ERR_get_KindByStr;
 		}
 
 		if ((cdl.DoModal() != IDOK) || (cdl.mn_selection_index == LB_ERR)) {
 //			#pragma bookmark (note: insert helpful message box here get_KindByStr[1] )
-//			AfxMessageBox(_T("no items chosen from dialog"));
+			SetErrorInfo(_T("No item chosen from dialog"));
 			return RESOLV_ERR_get_KindByStr;
 		}
 
@@ -899,6 +869,7 @@
 						return S_OK;
 					}
 					if (!this->mb_is_interactive) {
+						SetErrorInfo(CString(L"Could not resolve kind '") + kind + L"'");
 						return RESOLV_ERR_get_RoleByStr;
 					}
 
@@ -1025,12 +996,14 @@
 				// we have a fork in the road-- if no user input, we can't resolve
 
 				if (!this->mb_is_interactive) {
+					SetErrorInfo(CString(L"Could not resolve kind '") + kind + L"'");
 					return RESOLV_ERR_get_RoleByStr;
 				}
 
+				INT_PTR dlgResult;
 				if ((cdl.m_sz_prelist.GetCount() != 0) 
 					&& 
-					(cdl.DoModal() == IDOK) 
+					((dlgResult = cdl.DoModal()) == IDOK) 
 					&& 
 					(cdl.mn_selection_index != LB_ERR)) {
 
@@ -1056,6 +1029,11 @@
 					return S_OK;
 										
 				}
+				if (dlgResult == IDCANCEL)
+				{
+					SetErrorInfo(CString(L"Parsing cancelled"));
+					return RESOLV_ERR_get_RoleByStr;
+				}
 
 
 			} // if objtype match
@@ -1065,49 +1043,36 @@
 
 //		#pragma bookmark (note: insert helpful message box here get_AttrByStr[] )
 
-		if (this->mb_is_interactive) {
+		CComBSTR parent_name;
+		COMTHROW( parent->get_Name(&parent_name) );
 
-			CComBSTR parent_name;
-			COMTHROW( parent->get_Name(&parent_name) );
+		CComBSTR mparent_name;
+		COMTHROW( parent_meta_fco->get_Name(&mparent_name) );
 
-			CComBSTR mparent_name;
-			COMTHROW( parent_meta_fco->get_Name(&mparent_name) );
+		CString sz_format;
+		CString sz_format_tmp;
 
-			CString sz_format;
-			CString sz_format_tmp;
+		sz_format_tmp.Format(	_T("Paradigm Violation: cannot create within parent model '%s' ")
+								_T("of type '%s' a child"),
+								(BSTR) parent_name,
+								(BSTR) mparent_name);
+		sz_format+=sz_format_tmp;
 
-			sz_format_tmp.Format(	_T("Paradigm Violation!  Cannot create within parent model '%s' ")
-									_T("of type '%s' a child"),
-									(BSTR) parent_name,
-									(BSTR) mparent_name);
+		if (CString(kind) != _T("")) {
+			sz_format_tmp.Format(_T(" with kind '%s'"), kind);
 			sz_format+=sz_format_tmp;
+		}
 
-			if (CString(kind) != _T("")) {
-				sz_format_tmp.Format(_T(" with kind '%s'"), kind);
-				sz_format+=sz_format_tmp;
-			}
-
-			if (objtype != OBJTYPE_NULL) {
-				sz_format_tmp.Format(_T(" of type %s"), helper_ObjTypeStr(objtype));
-				sz_format+=sz_format_tmp;
-			}
-
-			if (CString(aspect) != _T("")) {
-				sz_format_tmp.Format(_T(" in aspect '%s'"), aspect);
-				sz_format+=sz_format_tmp;
-			}
-							
-			CComPtr<IMgaProject> mgaProject;
-			COMTHROW(parent->get_Project(&mgaProject));
-			CComPtr<IGMEOLEApp> pGME = get_GME(mgaProject);
-			if (pGME) {
-				COMTHROW(pGME->ConsoleMessage(CComBSTR(sz_format), MSG_ERROR));
-			}
-			else {
-				AfxMessageBox(sz_format, MB_ICONSTOP | MB_OK);
-			}
+		if (objtype != OBJTYPE_NULL) {
+			sz_format_tmp.Format(_T(" of type %s"), helper_ObjTypeStr(objtype));
+			sz_format+=sz_format_tmp;
+		}
 
+		if (CString(aspect) != _T("")) {
+			sz_format_tmp.Format(_T(" in aspect '%s'"), aspect);
+			sz_format+=sz_format_tmp;
 		}
+		SetErrorInfo(sz_format);
 		return RESOLV_ERR_get_RoleByStr;
 	
 	}
@@ -1185,6 +1150,7 @@
 				//		since not interactive, exit
 
 				if (! this->mb_is_interactive) {
+					SetErrorInfo(CString(L"Could not resolve attribute '") + kind + L"'");
 					return RESOLV_ERR_get_AttrByStr;
 				}
 
@@ -1218,6 +1184,7 @@
                 }
                 else if( dlgres == IDCANCEL )
                 {
+					SetErrorInfo(CString(L"Could not resolve attribute '") + kind + L"'");
                     return RESOLV_ERR_get_AttrByStr;
                 }				
 
@@ -1240,39 +1207,25 @@
 		}
 
 //		#pragma bookmark (note: insert helpful message box here get_AttrByStr[] )
-		if (this->mb_is_interactive) {
-
-			CString sz_format;
-			CComBSTR name;
-			CComBSTR meta_name;
-			objtype_enum objtype;
-
-			COMTHROW( parent->get_ObjType(&objtype) );
-			COMTHROW( parent->get_Name(&name) );
-			COMTHROW( parent_metafco->get_Name(&meta_name) );
+		CString sz_format;
+		CComBSTR name;
+		CComBSTR meta_name;
+		objtype_enum objtype;
+
+		COMTHROW( parent->get_ObjType(&objtype) );
+		COMTHROW( parent->get_Name(&name) );
+		COMTHROW( parent_metafco->get_Name(&meta_name) );
   
 			
-			sz_format.Format(	_T("No such attribute %s\n")
-								_T("can be found in %s %s\n")
-								_T("of kind %s"),
-					kind,
-					helper_ObjTypeStr(objtype),
-					name.m_str,
-					meta_name.m_str
-			);
-
-			CComPtr<IMgaProject> mgaProject;
-			COMTHROW(parent->get_Project(&mgaProject));
-			CComPtr<IGMEOLEApp> pGME = get_GME(mgaProject);
-			if (pGME) {
-				COMTHROW(pGME->ConsoleMessage(CComBSTR(sz_format), MSG_ERROR));
-			}
-			else {
-				AfxMessageBox(sz_format, MB_ICONSTOP | MB_OK);
-			}
-		
-		
-		}
+		sz_format.Format(	_T("No such attribute %s\n")
+							_T("can be found in %s %s\n")
+							_T("of kind %s"),
+				kind,
+				helper_ObjTypeStr(objtype),
+				name.m_str,
+				meta_name.m_str
+		);
+		SetErrorInfo(sz_format);
 
 		return RESOLV_ERR_get_AttrByStr;
 
@@ -1324,8 +1277,13 @@
 									p
 								);
 
-	return ((hr == RESOLV_ERR_get_RoleByStr) ? RESOLV_ERR_get_RoleByMeta :
-		hr);
+		if (SUCCEEDED(hr)) {
+			return hr;
+		}
+		else {
+			SetErrorInfo(CString(L"Could not resolve role for kind '") + sz_kind + L"'");
+			return ((hr == RESOLV_ERR_get_RoleByStr) ? RESOLV_ERR_get_RoleByMeta : hr);
+		}
 
 	}
 
@@ -1497,12 +1455,14 @@
 //			if (valid_role_count == 0)
 //				return RESOLV_ERR_get_ConnRoleByMeta;
 
+			SetErrorInfo(CString(L"Could not resolve connection role"));
 			return RESOLV_ERR_get_ConnRoleByMeta;
 		}
 
 		if (valid_role_count > 0) {
 
 			if ((cdl.DoModal() != IDOK) || (cdl.mn_selection_index == LB_ERR)) {
+				SetErrorInfo(CString(L"Cancelled by user"));
 				return E_ABORT;
 
 			} else {
@@ -1600,7 +1560,7 @@
 			CString sz_format_tmp;
 
 			sz_format_tmp.Format(
-				_T("Paradigm violation!  Cannot make connection for \n")
+				_T("Paradigm violation: cannot make connection for \n")
 				_T("source: %s (%s)"),
 				sz_src_name, sz_src_role_name
 			);
@@ -1650,16 +1610,7 @@
 			);
 			sz_format += sz_format_tmp;
 
-			CComPtr<IMgaProject> mgaProject;
-			COMTHROW(parent->get_Project(&mgaProject));
-			CComPtr<IGMEOLEApp> pGME = get_GME(mgaProject);
-			if (pGME) {
-				COMTHROW(pGME->ConsoleMessage(CComBSTR(sz_format), MSG_ERROR));
-			}
-			else {
-				AfxMessageBox(sz_format, MB_ICONSTOP | MB_OK);
-			}
-
+			SetErrorInfo(sz_format);
 			return RESOLV_ERR_get_ConnRoleByMeta;
 
 		}
@@ -1790,10 +1741,11 @@
 
 		if (!this->mb_is_interactive) {
 
-			if (valid_role_count == 0) {
-				return RESOLV_ERR_get_ConnRoleByMeta;
-			}
+			//if (valid_role_count == 0) {
+			//	return RESOLV_ERR_get_ConnRoleByMeta;
+			//}
 
+			SetErrorInfo(CString(L"Could not resolve reference role'"));
 			return RESOLV_ERR_get_ConnRoleByMeta;
 
 		}
@@ -1901,16 +1853,7 @@
 			);
 			sz_format += sz_format_tmp;
 
-			CComPtr<IMgaProject> mgaProject;
-			COMTHROW(parent->get_Project(&mgaProject));
-			CComPtr<IGMEOLEApp> pGME = get_GME(mgaProject);
-			COMTHROW(pGME->ConsoleMessage(CComBSTR(sz_format), MSG_ERROR));
-			if (pGME) {
-				COMTHROW(pGME->ConsoleMessage(CComBSTR(sz_format), MSG_ERROR));
-			}
-			else {
-				AfxMessageBox(sz_format, MB_ICONSTOP | MB_OK);
-			}
+			SetErrorInfo(sz_format);
 
 			return RESOLV_ERR_get_ConnRoleByMeta;
 

Modified: trunk/GME/MgaUtil/MgaResolver.h
==============================================================================
--- trunk/GME/MgaUtil/MgaResolver.h	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/MgaUtil/MgaResolver.h	Wed Sep 26 08:53:32 2012	(r2062)
@@ -166,7 +166,8 @@
 class ATL_NO_VTABLE CMgaResolver : 
 	public CComObjectRootEx<CComSingleThreadModel>,
 	public CComCoClass<CMgaResolver, &__uuidof(MgaResolver)>,
-	public IDispatchImpl<IMgaResolver, &__uuidof(IMgaResolver), &__uuidof(__MGAUtilLib)>
+	public IDispatchImpl<IMgaResolver, &__uuidof(IMgaResolver), &__uuidof(__MGAUtilLib)>,
+	public ISupportErrorInfoImpl<&__uuidof(IMgaResolver)>
 {
 public:
 	CMgaResolver() : mb_is_interactive(true), mb_use_sticky(false)
@@ -183,6 +184,7 @@
 BEGIN_COM_MAP(CMgaResolver)
 	COM_INTERFACE_ENTRY(IMgaResolver)
 	COM_INTERFACE_ENTRY(IDispatch)
+	COM_INTERFACE_ENTRY(ISupportErrorInfo)
 END_COM_MAP()
 
 public:

Modified: trunk/GME/Parser/GenParser.cpp
==============================================================================
--- trunk/GME/Parser/GenParser.cpp	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Parser/GenParser.cpp	Wed Sep 26 08:53:32 2012	(r2062)
@@ -178,7 +178,7 @@
 	
 	fireStartFunction(namestr, attributes);
 	}
-	catch(hresult_exception &)
+	catch (hresult_exception &)
 	{
 		if( locator != NULL )
 		{
@@ -194,6 +194,26 @@
 
 		throw;
 	}
+	catch (_com_error& e)
+	{
+		std::tstring str;
+		if( locator != NULL )
+		{
+			err_line = locator->getLineNumber();
+			err_column = locator->getColumnNumber();
+
+			// we compose and set the error message for exceptions
+			// [which come from the MGA layer because of meta incompatibility]
+			Format(str, _T("In file %s at line %d, char %d: "), xmlfile.c_str(), err_line, err_column);
+			errorinfo = str.c_str();
+		}
+		if (e.Description() != _bstr_t())
+		{
+			errorinfo = (str + static_cast<const TCHAR*>(e.Description())).c_str();
+			throw_com_error(e.Error(), e.Description());
+		}
+		throw hresult_exception(e.Error());
+	}
 }
 
 
@@ -240,7 +260,25 @@
 
 		throw;
 	}
+	catch (_com_error& e)
+	{
+		std::tstring str;
+		if( locator != NULL )
+		{
+			err_line = locator->getLineNumber();
+			err_column = locator->getColumnNumber();
 
+			// we compose and set the error message for exceptions
+			// [which come from the MGA layer because of meta incompatibility]
+			Format(str, _T("In file %s at line %d, char %d: "), xmlfile.c_str(), err_line, err_column);
+			errorinfo = str.c_str();
+		}
+		if (e.Description() != _bstr_t())
+		{
+			errorinfo = (str + static_cast<const TCHAR*>(e.Description())).c_str();
+		}
+		throw hresult_exception(e.Error());
+	}
 }
 
 void CGenParser::characters(const XMLCh* const chars, const XMLSize_t length)

Modified: trunk/GME/Parser/MetaParser.h
==============================================================================
--- trunk/GME/Parser/MetaParser.h	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Parser/MetaParser.h	Wed Sep 26 08:53:32 2012	(r2062)
@@ -13,9 +13,9 @@
 
 class ATL_NO_VTABLE CMgaMetaParser : 
 	public CComObjectRootEx<CComSingleThreadModel>,
-	public CComCoClass<CMgaMetaParser, &CLSID_MgaMetaParser>,
-	public ISupportErrorInfoImpl<&IID_IMgaMetaParser>,
-	public IDispatchImpl<IMgaMetaParser, &IID_IMgaMetaParser, &LIBID_MGAParserLib, 1, 1>,
+	public CComCoClass<CMgaMetaParser, &__uuidof(MgaMetaParser)>,
+	public ISupportErrorInfoImpl<&__uuidof(IMgaMetaParser)>,
+	public IDispatchImpl<IMgaMetaParser, &__uuidof(IMgaMetaParser), &__uuidof(__MGAParserLib), 1, 1>,
 	public IGMEVersionInfoImpl,
 	public CGenParser
 {
@@ -34,7 +34,7 @@
 	COM_INTERFACE_ENTRY(IMgaMetaParser)
 	COM_INTERFACE_ENTRY(IDispatch)
 	COM_INTERFACE_ENTRY(ISupportErrorInfo)
-	COM_INTERFACE_ENTRY_IID(IID_IGMEVersionInfo, IGMEVersionInfoImpl)
+	COM_INTERFACE_ENTRY_IID(__uuidof(IGMEVersionInfo), IGMEVersionInfoImpl)
 END_COM_MAP()
 
 // ------- Methods

Modified: trunk/GME/Parser/MgaDumper.h
==============================================================================
--- trunk/GME/Parser/MgaDumper.h	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Parser/MgaDumper.h	Wed Sep 26 08:53:32 2012	(r2062)
@@ -35,9 +35,9 @@
 
 class ATL_NO_VTABLE CMgaDumper : 
 	public CComObjectRootEx<CComSingleThreadModel>,
-	public CComCoClass<CMgaDumper, &CLSID_MgaDumper>,
-	public ISupportErrorInfoImpl2<&IID_IMgaDumper, &IID_IMgaDumper2>,
-	public IDispatchImpl<IMgaDumper2, &IID_IMgaDumper2, &LIBID_MGAParserLib, 1, 1>,
+	public CComCoClass<CMgaDumper, &__uuidof(MgaDumper)>,
+	public ISupportErrorInfoImpl2<&__uuidof(IMgaDumper), &_uuidof(IMgaDumper2)>,
+	public IDispatchImpl<IMgaDumper2, &__uuidof(IMgaDumper2), &__uuidof(__MGAParserLib), 1, 1>,
 	public IGMEVersionInfoImpl
 {
 public:
@@ -56,7 +56,7 @@
 	COM_INTERFACE_ENTRY2(IDispatch, IMgaDumper2)
 	COM_INTERFACE_ENTRY(IMgaDumper2)
 	COM_INTERFACE_ENTRY(ISupportErrorInfo)
-	COM_INTERFACE_ENTRY_IID(IID_IGMEVersionInfo, IGMEVersionInfoImpl)
+	COM_INTERFACE_ENTRY_IID(__uuidof(IGMEVersionInfo), IGMEVersionInfoImpl)
 END_COM_MAP()
 
 // ------- Methods

Modified: trunk/GME/Parser/MgaParser.cpp
==============================================================================
--- trunk/GME/Parser/MgaParser.cpp	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Parser/MgaParser.cpp	Wed Sep 26 08:53:32 2012	(r2062)
@@ -316,6 +316,17 @@
 
 		return e.hr;
 	}
+	catch(_com_error &e)
+	{
+		CloseAll();
+		clear_GME( m_GME);
+
+		ASSERT( FAILED(e.hr) );
+		if (e.Description() != _bstr_t())
+			SetErrorInfo(e.Description());
+
+		return e.Error();
+	}
 	return S_OK;
 }
 
@@ -1102,9 +1113,9 @@
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
-		COMTHROW( resolver->get_RoleByStr(prev, 
+		role = resolver->RoleByStr[prev.p,
 			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_MODEL,
-			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("role")), _bstr_t()];
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )

Modified: trunk/GME/Parser/MgaParser.h
==============================================================================
--- trunk/GME/Parser/MgaParser.h	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Parser/MgaParser.h	Wed Sep 26 08:53:32 2012	(r2062)
@@ -30,9 +30,9 @@
 
 class ATL_NO_VTABLE CMgaParser : 
 	public CComObjectRootEx<CComSingleThreadModel>,
-	public CComCoClass<CMgaParser, &CLSID_MgaParser>,
-	public ISupportErrorInfoImpl3<&IID_IMgaParser, &IID_IMgaParser2, &IID_IMgaParser3>,
-	public IDispatchImpl<IMgaParser3, &IID_IMgaParser3, &LIBID_MGAParserLib, 1, 1>,
+	public CComCoClass<CMgaParser, &__uuidof(MgaParser)>,
+	public ISupportErrorInfoImpl3<&__uuidof(IMgaParser), &__uuidof(IMgaParser2), &__uuidof(IMgaParser3)>,
+	public IDispatchImpl<IMgaParser3, &__uuidof(IMgaParser3), &__uuidof(__MGAParserLib), 1, 1>,
 	public IGMEVersionInfoImpl,
 	public CGenParser
 {
@@ -52,7 +52,7 @@
 	COM_INTERFACE_ENTRY(IMgaParser2)
 	COM_INTERFACE_ENTRY2(IMgaParser3, IMgaParser3)
 	COM_INTERFACE_ENTRY(ISupportErrorInfo)
-	COM_INTERFACE_ENTRY_IID(IID_IGMEVersionInfo, IGMEVersionInfoImpl)
+	COM_INTERFACE_ENTRY_IID(__uuidof(IGMEVersionInfo), IGMEVersionInfoImpl)
 END_COM_MAP()
 
 // ------- Methods

Modified: trunk/GME/Parser/StdAfx.cpp
==============================================================================
--- trunk/GME/Parser/StdAfx.cpp	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Parser/StdAfx.cpp	Wed Sep 26 08:53:32 2012	(r2062)
@@ -7,3 +7,5 @@
 #ifdef _ATL_STATIC_REGISTRY
 #include <statreg.h>
 #endif
+
+#import "MgaUtilLib.tlb" implementation_only no_namespace raw_method_prefix("") high_method_prefix("__") no_registry

Modified: trunk/GME/Parser/StdAfx.h
==============================================================================
--- trunk/GME/Parser/StdAfx.h	Mon Sep 24 10:37:07 2012	(r2061)
+++ trunk/GME/Parser/StdAfx.h	Wed Sep 26 08:53:32 2012	(r2062)
@@ -30,7 +30,36 @@
 
 #define ASSERT ATLASSERT
 
-#include "ParserLib.h"
+// Imports
+#define wireHWND HWND
+
+#import "CoreLib.tlb" no_implementation no_namespace raw_method_prefix("") high_method_prefix("__") no_registry
+#import "MetaLib.tlb" no_implementation no_namespace raw_method_prefix("") high_method_prefix("__") no_registry
+#import "MgaLib.tlb" no_implementation no_namespace raw_method_prefix("") high_method_prefix("__") no_registry
+#import "MgaUtilLib.tlb" no_implementation no_namespace raw_method_prefix("") high_method_prefix("__") no_registry
+#import "ParserLib.tlb" no_implementation no_namespace raw_method_prefix("") high_method_prefix("__") no_registry
+#import "GMELib.tlb" no_implementation no_namespace raw_method_prefix("") high_method_prefix("__") no_registry
+
+#include "CommonImport.h"
+
+#define cpp_quote(x) 
+#include "Interfaceversion.h"
+#undef cpp_quote
+typedef GMEInterfaceVersion_enum GMEInterfaceVersion;
+
+// Don't load the MIDL-generated headers
+#define __Core_h__
+#define __Meta_h__
+#define __Mga_h__
+#define __MgaUtil_h__
+#define __MgaUtilLib_h__
+#define __Parser_h__
+#define __Gme_h__
+#define __GmeLib_h__
+#define IID_IMgaDataSource __uuidof(IMgaDataSource)
+#define ATTVAL_ENUM _attval_enum
+// End Imports
+
 #include "CommonSmart.h"
 #include "CommonStl.h"
 #define GLOBAL_ID_STR   "guid"


More information about the gme-commit mailing list