[commit] r1235 - in trunk/GME: Common Console ConstraintManager GMEActiveBrowser Gme Meta MgaUtil ObjectInspector PanningView Parser

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Thu Mar 31 12:49:50 CDT 2011


Author: ksmyth
Date: Thu Mar 31 12:49:49 2011
New Revision: 1235

Log:
More UNICODE. Change xme to UTF-16

Modified:
   trunk/GME/Common/Common.vcxproj
   trunk/GME/Common/CommonMfc.h
   trunk/GME/Common/CommonSmart.h
   trunk/GME/Console/ConsoleCtl.cpp
   trunk/GME/ConstraintManager/GMEViolationDialog.cpp
   trunk/GME/GMEActiveBrowser/ActiveBrowserPropertyPage.cpp
   trunk/GME/GMEActiveBrowser/MgaMap.cpp
   trunk/GME/Gme/GME.vcxproj
   trunk/GME/Gme/GMEOLEData.cpp
   trunk/GME/Gme/GUIObject.cpp
   trunk/GME/Gme/MgaOpenDlg.cpp
   trunk/GME/Gme/gmeactivebrowser.cpp
   trunk/GME/Meta/MetaUtilities.h
   trunk/GME/MgaUtil/AlterNmspDlg.cpp
   trunk/GME/MgaUtil/AnnotationBrowserDlg.cpp
   trunk/GME/MgaUtil/AnnotationNode.cpp
   trunk/GME/MgaUtil/AnnotationUtil.cpp
   trunk/GME/MgaUtil/ClosureDlg.cpp
   trunk/GME/MgaUtil/ClosureRes.h
   trunk/GME/MgaUtil/CompDlg.cpp
   trunk/GME/MgaUtil/CompInfoDlg.cpp
   trunk/GME/MgaUtil/ConnPropertiesDlg.cpp
   trunk/GME/MgaUtil/DirDialog.cpp
   trunk/GME/MgaUtil/FolderPropertiesDlg.cpp
   trunk/GME/MgaUtil/GUIDCreate.cpp
   trunk/GME/MgaUtil/GUIDCreate.h
   trunk/GME/MgaUtil/GmeDlg.cpp
   trunk/GME/MgaUtil/GmeDlg.h
   trunk/GME/MgaUtil/MakeClosure.cpp
   trunk/GME/MgaUtil/MetaDlg.cpp
   trunk/GME/MgaUtil/MetaPurgeDialog.cpp
   trunk/GME/MgaUtil/MgaClosure.cpp
   trunk/GME/MgaUtil/MgaEventLogger.cpp
   trunk/GME/MgaUtil/MgaLauncher.cpp
   trunk/GME/MgaUtil/MgaProgressDlg.cpp
   trunk/GME/MgaUtil/MgaRegistrar.cpp
   trunk/GME/MgaUtil/MgaResolver.cpp
   trunk/GME/MgaUtil/MgaUtil.vcxproj
   trunk/GME/MgaUtil/PropertiesDlg.cpp
   trunk/GME/MgaUtil/RegistryBrowserDlg.cpp
   trunk/GME/MgaUtil/RegistryTree.cpp
   trunk/GME/MgaUtil/SplitterBar.cpp
   trunk/GME/MgaUtil/colorbtn.cpp
   trunk/GME/ObjectInspector/Preference.cpp
   trunk/GME/PanningView/PanningView.vcxproj
   trunk/GME/Parser/GenParser.cpp
   trunk/GME/Parser/GenParser.h
   trunk/GME/Parser/Helper.cpp
   trunk/GME/Parser/Helper.h
   trunk/GME/Parser/MetaParser.cpp
   trunk/GME/Parser/MetaParser.h
   trunk/GME/Parser/MgaDumper.cpp
   trunk/GME/Parser/MgaDumper.h
   trunk/GME/Parser/MgaParser.cpp
   trunk/GME/Parser/MgaParser.h
   trunk/GME/Parser/MgaParserBC.cpp
   trunk/GME/Parser/MgaParserClosureHelper.cpp
   trunk/GME/Parser/MgaParserSC.cpp
   trunk/GME/Parser/Parser.vcxproj
   trunk/GME/Parser/StdAfx.h
   trunk/GME/Parser/Transcoder.cpp
   trunk/GME/Parser/Transcoder.h

Modified: trunk/GME/Common/Common.vcxproj
==============================================================================
--- trunk/GME/Common/Common.vcxproj	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Common/Common.vcxproj	Thu Mar 31 12:49:49 2011	(r1235)
@@ -22,13 +22,13 @@
     <ConfigurationType>Utility</ConfigurationType>
     <UseOfMfc>Dynamic</UseOfMfc>
     <UseOfAtl>Dynamic</UseOfAtl>
-    <CharacterSet>MultiByte</CharacterSet>
+    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Utility</ConfigurationType>
     <UseOfMfc>Dynamic</UseOfMfc>
     <UseOfAtl>Dynamic</UseOfAtl>
-    <CharacterSet>MultiByte</CharacterSet>
+    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
@@ -95,4 +95,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>
\ No newline at end of file

Modified: trunk/GME/Common/CommonMfc.h
==============================================================================
--- trunk/GME/Common/CommonMfc.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Common/CommonMfc.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -11,9 +11,11 @@
 // --------------------------- CString
 
 inline void CopyTo(const CStringA &s, BSTR *b) { CopyTo(s, s.GetLength(), b); }
+inline void CopyTo(const CStringW &s, BSTR *b) { *b = CComBSTR(s).Detach(); }
 inline void CopyTo(const CStringA &s, VARIANT *v) { CopyTo(s, s.GetLength(), v); }
 inline void CopyTo(const CStringA &s, CComBstrObj &a) { CopyTo(s, s.GetLength(), a); }
 inline void CopyTo(const CStringW &s, CComBstrObj &a) { a = CComBstrObj(s); }
+inline void CopyTo(const CStringW &s, CComBSTR &a) { a = CComBSTR(s); }
 inline void CopyTo(const CStringA &s, CComVariant &a) { CopyTo(s, s.GetLength(), a); }
 
 inline void CopyTo(BSTR b, CStringA &s)
@@ -27,7 +29,7 @@
 inline void CopyBSTRTo(const BSTR b, CStringW& s)
 {
 	int len = SysStringLen(b);
-	memcpy(s.GetBufferSetLength(len), b, len);
+	memcpy(s.GetBufferSetLength(len*sizeof(wchar_t)), b, len*sizeof(wchar_t));
 	s.ReleaseBuffer(len);
 }
 
@@ -97,6 +99,8 @@
 	template<class T>
 	PutInCString(T t) { CopyTo(t, b); }
 
+	template<>
+	PutInCString(BSTR t) { b = t; }
 	operator const CString &() { return b; }
 	operator const TCHAR *() { return b; }
 

Modified: trunk/GME/Common/CommonSmart.h
==============================================================================
--- trunk/GME/Common/CommonSmart.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Common/CommonSmart.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -147,7 +147,7 @@
 {
 public:
 	CComBstrObj() : p(NULL) { }
-	CComBstrObj(LPCOLESTR q) { p = SysAllocString(q); }
+	explicit CComBstrObj(LPCOLESTR q) { p = SysAllocString(q); }
 	CComBstrObj(const CComBstrObj &q) : p(NULL) { if(q.p) { p = SysAllocStringLen(q, q.Length()); } }
 	CComBstrObj(CComBstrObj &&q) { p = q.p; q.p = NULL; }
 	~CComBstrObj() { if(p) SysFreeString(p); }

Modified: trunk/GME/Console/ConsoleCtl.cpp
==============================================================================
--- trunk/GME/Console/ConsoleCtl.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Console/ConsoleCtl.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -822,9 +822,9 @@
 	CStringA aTip(tip);
 	CStringW wTip(tip);
 	if( pNMHDR->code == TTN_NEEDTEXTA)
-		StringCchCopyA((char*)pTTTA->szText, sizeof(pTTTA->szText) / sizeof(char) - 1, aTip);
+		StringCchCopyA(pTTTA->szText, sizeof(pTTTA->szText) / sizeof(char) - 1, aTip);
 	else
-		StringCchCopyW((wchar_t*)pTTTW->szText, sizeof(pTTTW->szText) / sizeof(wchar_t) - 1, wTip);
+		StringCchCopyW(pTTTW->szText, sizeof(pTTTW->szText) / sizeof(wchar_t) - 1, wTip);
 
 	*pResult = 0;
 	return TRUE;    // message was handled

Modified: trunk/GME/ConstraintManager/GMEViolationDialog.cpp
==============================================================================
--- trunk/GME/ConstraintManager/GMEViolationDialog.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/ConstraintManager/GMEViolationDialog.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -190,13 +190,13 @@
 		lvItem.mask = LVIF_TEXT;
 		lvItem.iSubItem = 1;
 		CString strText = m_vecRecords[ i ].spConstraint->GetContextType().c_str();// OclCommonEx::Convert( m_vecRecords[ i ].spConstraint->GetContextType() );
-		lvItem.pszText = (char*)(LPCTSTR)strText; //.GetBuffer( strText.GetLength() );
+		lvItem.pszText = (TCHAR*)(LPCTSTR)strText; //.GetBuffer( strText.GetLength() );
 		m_lstConstraints.SetItem( &lvItem );
 //		strText.ReleaseBuffer();
 
 		lvItem.iSubItem = 2;
 		strText = m_vecRecords[ i ].spConstraint->GetName().c_str(); // OclCommonEx::Convert( m_vecRecords[ i ].spConstraint->GetName() );
-		lvItem.pszText = (char*)(LPCTSTR)strText; //.GetBuffer( strText.GetLength() );
+		lvItem.pszText = (TCHAR*)(LPCTSTR)strText; //.GetBuffer( strText.GetLength() );
 		m_lstConstraints.SetItem( &lvItem );
 //		strText.ReleaseBuffer();
 	}
@@ -509,7 +509,7 @@
 			lvItem.iImage = 0;
 			lvItem.lParam = i;
 			CString strTemp = vi.vecVariables[ i ].c_str(); // OclCommonEx::Convert( vi.vecVariables[ i ] );
-			lvItem.pszText = (char*)(LPCTSTR)strTemp;//.GetBuffer( strTemp.GetLength() );
+			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp;//.GetBuffer( strTemp.GetLength() );
 			m_lstObjects.InsertItem( &lvItem );
 
 //			strTemp.ReleaseBuffer();
@@ -520,7 +520,7 @@
 			lvItem.mask = LVIF_TEXT;
 			lvItem.iSubItem = 1;
 			strTemp = vi.vecObjects[ i ].c_str(); // OclCommonEx::Convert( vi.vecObjects[ i ] );
-			lvItem.pszText = (char*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
+			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
 			m_lstObjects.SetItem( &lvItem );
 
 //			strTemp.ReleaseBuffer();
@@ -570,7 +570,7 @@
 				lvItem.lParam = it->second.serial*1000 +i;
 				CString strTemp;
 				strTemp.Format( "%d", it->second.serial*1000 + i + 1 );
-				lvItem.pszText = (char*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
+				lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
 				m_lstExpression.InsertItem( &lvItem );
 
 //				strTemp.ReleaseBuffer();
@@ -581,7 +581,7 @@
 				lvItem.mask = LVIF_TEXT;
 				lvItem.iSubItem = 1;
 				strTemp = arrText.GetAt( i );
-				lvItem.pszText = (char*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
+				lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
 				m_lstExpression.SetItem( &lvItem );
 
 //				strTemp.ReleaseBuffer();
@@ -629,7 +629,7 @@
 			lvItem.lParam = i;
 			CString strTemp;
 			strTemp.Format( "%d", i + 1 );
-			lvItem.pszText = (char*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
+			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
 			m_lstExpression.InsertItem( &lvItem );
 
 //			strTemp.ReleaseBuffer();
@@ -640,7 +640,7 @@
 			lvItem.mask = LVIF_TEXT;
 			lvItem.iSubItem = 1;
 			strTemp = arrText.GetAt( i );
-			lvItem.pszText = (char*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
+			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
 			m_lstExpression.SetItem( &lvItem );
 
 //			strTemp.ReleaseBuffer();
@@ -678,7 +678,7 @@
 				strTemp = "?";
 			else
 				strTemp.Format( "%d", vi.position.iLine );
-			lvItem.pszText = (char*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
+			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
 			m_lstErrors.InsertItem( &lvItem );
 
 //			strTemp.ReleaseBuffer();
@@ -693,7 +693,7 @@
 			lvItem.mask = LVIF_TEXT;
 			lvItem.iSubItem = 1;
 			strTemp.Format( "%d", vi.position.iColumn );
-			lvItem.pszText = (char*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
+			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
 			m_lstErrors.SetItem( &lvItem );
 
 //			strTemp.ReleaseBuffer();
@@ -705,7 +705,7 @@
 			lvItem.mask = LVIF_TEXT;
 			lvItem.iSubItem = 1;
 			strTemp = vi.strMessage.c_str(); // OclCommonEx::Convert( vi.strMessage );
-			lvItem.pszText = (char*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
+			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
 			m_lstErrors.SetItem( &lvItem );
 
 //			strTemp.ReleaseBuffer();
@@ -715,7 +715,7 @@
 
 			lvItem.iSubItem = 2;
 			strTemp = vi.strSignature.c_str(); // OclCommonEx::Convert( vi.strSignature );
-			lvItem.pszText = (char*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
+			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
 			m_lstErrors.SetItem( &lvItem );
 
 //			strTemp.ReleaseBuffer();

Modified: trunk/GME/GMEActiveBrowser/ActiveBrowserPropertyPage.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/ActiveBrowserPropertyPage.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/GMEActiveBrowser/ActiveBrowserPropertyPage.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -2320,7 +2320,7 @@
 				item[itemcount++] = id;
 				iitem = parent;
 				parent.Release();
-			} while (!m_TreeAggregate.m_MgaMap.SearchTreeItem((wchar_t*)((char*)id),hNewItem, pUnknown));
+			} while (!m_TreeAggregate.m_MgaMap.SearchTreeItem(id,hNewItem, pUnknown));
 			pMgaContext->CommitTransaction();
 			// open the parents in backward order
 			worked = true;
@@ -2330,7 +2330,7 @@
 			m_TreeAggregate.SendMessage(WM_KEYDOWN, (WPARAM)107, (LPARAM)0);
 			for (itemcount-=2; itemcount > 0; itemcount--)
 			{
-				if (m_TreeAggregate.m_MgaMap.SearchTreeItem((wchar_t*)((char*)item[itemcount]),hNewItem, pUnknown))
+				if (m_TreeAggregate.m_MgaMap.SearchTreeItem(item[itemcount],hNewItem, pUnknown))
 				{
 					m_TreeAggregate.EnsureVisible(hNewItem);
 					m_TreeAggregate.ClearSelection(TRUE);

Modified: trunk/GME/GMEActiveBrowser/MgaMap.cpp
==============================================================================
--- trunk/GME/GMEActiveBrowser/MgaMap.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/GMEActiveBrowser/MgaMap.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -196,7 +196,7 @@
 	  BSTR oid = NULL;
 	  mgao->get_ID(&oid);
 	  _bstr_t boid(oid, false);
-	  _bstr_t bid = (char*)Id;
+	  _bstr_t bid = Id;
 	  if (bid == boid)
 	  {
 		  found = true;

Modified: trunk/GME/Gme/GME.vcxproj
==============================================================================
--- trunk/GME/Gme/GME.vcxproj	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Gme/GME.vcxproj	Thu Mar 31 12:49:49 2011	(r1235)
@@ -255,7 +255,9 @@
     <None Include="AnnotatorEventSink.rgs" />
     <None Include="DecoratorEventSink.rgs" />
     <None Include="aboutpic.bmp" />
-    <None Include="GME.exe.config" />
+    <None Include="GME.exe.config">
+      <SubType>Designer</SubType>
+    </None>
     <None Include="res\atomport.bmp" />
     <None Include="res\bitmap1.bmp" />
     <None Include="res\bitmap_l.bmp" />

Modified: trunk/GME/Gme/GMEOLEData.cpp
==============================================================================
--- trunk/GME/Gme/GMEOLEData.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Gme/GMEOLEData.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -213,7 +213,7 @@
 {
 	ASSERT( pDataObject != NULL );
 
-	return pDataObject->IsDataAvailable(CF_TEXT) != FALSE;
+	return pDataObject->IsDataAvailable(CF_UNICODETEXT) != FALSE;
 }
 
 bool CGMEDataSource::ParseXMLData(COleDataObject *pDataObject, IMgaObject *target, bool merge = false)
@@ -229,7 +229,7 @@
 	try
 	{
 		// get the memory file
-		CFile *memfile = pDataObject->GetFileData(CF_TEXT);
+		CFile *memfile = pDataObject->GetFileData(CF_UNICODETEXT);
 		if( memfile == NULL )
 			return false;
 		memfile->SeekToBegin();
@@ -356,15 +356,15 @@
 void CGMEDataSource::DelayXMLDump()
 {
 	FORMATETC fe = {
-    CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_ISTREAM|TYMED_HGLOBAL
+    CF_UNICODETEXT, NULL, DVASPECT_CONTENT, -1, TYMED_ISTREAM|TYMED_HGLOBAL
 	};
           
-	DelayRenderFileData(CF_TEXT, &fe);
+	DelayRenderFileData(CF_UNICODETEXT, &fe);
 }
 
 BOOL CGMEDataSource::OnRenderFileData(LPFORMATETC lpFormatEtc, CFile* pFile)
 {
-	if( lpFormatEtc->cfFormat == CF_TEXT )
+	if( lpFormatEtc->cfFormat == CF_UNICODETEXT )
 	{
 		ASSERT( pFile != NULL );
 
@@ -406,9 +406,6 @@
 				pFile->Write(buff, c);
 			} while( c == buffsize );
 
-			buff[0] = 0;
-			pFile->Write(buff, 1);
-
 			file.Close();
 			CFile::Remove(filename);
 		}
@@ -432,7 +429,7 @@
 // ****************************************************************************************************
 BOOL CGMEClosureDataSource::OnRenderFileData(LPFORMATETC lpFormatEtc, CFile* pFile)
 {
-	if( lpFormatEtc->cfFormat == CF_TEXT )
+	if( lpFormatEtc->cfFormat == CF_UNICODETEXT )
 	{
 		ASSERT( pFile != NULL );
 

Modified: trunk/GME/Gme/GUIObject.cpp
==============================================================================
--- trunk/GME/Gme/GUIObject.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Gme/GUIObject.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -2320,9 +2320,9 @@
 	if (label.IsEmpty())
 		return;
 
-	label.Replace("%name%", (LPCSTR)(conn->name));
-	label.Replace("%kind%", (LPCSTR)(conn->kindDisplayedName));
-	label.Replace("%role%", (LPCSTR)(conn->roleDisplayedName));
+	label.Replace("%name%", conn->name);
+	label.Replace("%kind%", conn->kindDisplayedName);
+	label.Replace("%role%", conn->roleDisplayedName);
 
 	CGuiMetaAttributeList *metaAttrs = conn->GetMetaAttributes();
 	POSITION pos = metaAttrs->GetHeadPosition();
@@ -3324,8 +3324,7 @@
 		valStr.Append(edgeStr);
 	}
 	VERIFY(mgaFco);
-	CComBSTR pathBstr;
-	CopyTo(CUSTOMCONNECTIONDATA, pathBstr);
+	CComBSTR pathBstr = CUSTOMCONNECTIONDATA;
 	CComBSTR bstrVal;
 	if (valStr == "")
 		bstrVal = EMPTYCONNECTIONCUSTOMIZATIONDATAMAGIC;
@@ -3638,8 +3637,7 @@
 void CGuiConnection::WriteAutoRouteState(bool handleTransaction)
 {
 	VERIFY(mgaFco);
-	CComBSTR pathBstr;
-	CopyTo(CONNECTIONAUTOROUTING, pathBstr);
+	CComBSTR pathBstr = CONNECTIONAUTOROUTING;
 	CString valStr = isAutoRouted ? "true" : "false";
 	CComBSTR bstrVal;
 	CopyTo(valStr, bstrVal);

Modified: trunk/GME/Gme/MgaOpenDlg.cpp
==============================================================================
--- trunk/GME/Gme/MgaOpenDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Gme/MgaOpenDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -177,7 +177,7 @@
 			}
 			else if( m_radio == 1 )
 			{
-				CFileDialog dlg(true, NULL, fileNameHint.IsEmpty() ? NULL : (LPCSTR)fileNameHint,
+				CFileDialog dlg(true, NULL, fileNameHint.IsEmpty() ? NULL : (LPCTSTR)fileNameHint,
 					OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |
 					(flag_create ? 0 : OFN_FILEMUSTEXIST), allowXme ? xmemgafilter : mgafilter);
 				if (!folderPathHint.IsEmpty())

Modified: trunk/GME/Gme/gmeactivebrowser.cpp
==============================================================================
--- trunk/GME/Gme/gmeactivebrowser.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Gme/gmeactivebrowser.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -51,6 +51,5 @@
 {
 	static BYTE parms[] =
 		VTS_BSTR;
-	_bstr_t bid(Id);
-	InvokeHelper(0x6, DISPATCH_METHOD, VT_EMPTY, NULL, parms, (char*)bid);
+	InvokeHelper(0x6, DISPATCH_METHOD, VT_EMPTY, NULL, parms, Id);
 }

Modified: trunk/GME/Meta/MetaUtilities.h
==============================================================================
--- trunk/GME/Meta/MetaUtilities.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Meta/MetaUtilities.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -541,6 +541,11 @@
 			return false;
 		}
 	}
+
+	bool operator()( const CComBstrObj &pFullNmInParadigm, BSTR pUnknownFormat) const
+	{
+		return operator()(pFullNmInParadigm, CComBstrObj(pUnknownFormat));
+	}
 };
 
 

Modified: trunk/GME/MgaUtil/AlterNmspDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/AlterNmspDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/AlterNmspDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -82,13 +82,13 @@
 	 || m_vRadAlter == 2 && m_strTrunc.IsEmpty()
 	 || m_vRadAlter == 3 && ( m_strPrefix.IsEmpty() || m_strTrunc.IsEmpty()))
 	{
-		AfxMessageBox( "Please do NOT specify empty string in the edit box!");
+		AfxMessageBox( _T("Please do NOT specify empty string in the edit box!"));
 		return; // don't allow these scenarios
 	}
 
 	// completing the namespaces with the operator: '::'
-	if( !m_strPrefix.IsEmpty() && m_strPrefix.Right(2) != "::") m_strPrefix += "::";
-	if( !m_strTrunc.IsEmpty()  && m_strTrunc.Right(2)  != "::") m_strTrunc  += "::";
+	if( !m_strPrefix.IsEmpty() && m_strPrefix.Right(2) != _T("::")) m_strPrefix += _T("::");
+	if( !m_strTrunc.IsEmpty()  && m_strTrunc.Right(2)  != _T("::")) m_strTrunc  += _T("::");
 
 	UpdateData( FALSE);
 	//m_storedStrPrefix = m_strPrefix;
@@ -124,9 +124,9 @@
 }
 void AlterNmspDlg::OnBnClickedButton1()
 {
-	AfxMessageBox("Kinds may differ in this paradigm compared to the originating one. You might choose to "
-		"prefix the originating object kinds and roles with a specific namespace string. "
-		"You might also choose to disregard namespace related information from the XML data by using the Trunc option. "
-		"To migrate from one namespace to another you can specify the namespace string to be removed (in the 2nd edit box) and the namespace "
-		"string to be used then as a prefix (in the 1st edit box).", MB_OK | MB_ICONINFORMATION);
+	AfxMessageBox(_T("Kinds may differ in this paradigm compared to the originating one. You might choose to ")
+		_T("prefix the originating object kinds and roles with a specific namespace string. ")
+		_T("You might also choose to disregard namespace related information from the XML data by using the Trunc option. ")
+		_T("To migrate from one namespace to another you can specify the namespace string to be removed (in the 2nd edit box) and the namespace ")
+		_T("string to be used then as a prefix (in the 1st edit box)."), MB_OK | MB_ICONINFORMATION);
 }

Modified: trunk/GME/MgaUtil/AnnotationBrowserDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/AnnotationBrowserDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/AnnotationBrowserDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -13,8 +13,8 @@
 static char THIS_FILE[] = __FILE__;
 #endif
 
-const char * show_str = "Show";
-const char * hide_str = "Hide";
+const TCHAR * show_str = _T("Show");
+const TCHAR * hide_str = _T("Hide");
 /////////////////////////////////////////////////////////////////////////////
 // CAnnotationBrowserDlg dialog
 
@@ -146,7 +146,7 @@
 			CopyTo(bstr_tmp,m_modelKind);
 		}
 		else {
-			m_modelKind = "N/A";
+			m_modelKind = _T("N/A");
 		}
 
 		CComPtr<IMgaMetaRole> metaRole;
@@ -157,7 +157,7 @@
 			CopyTo(bstr_tmp, m_modelRole);
 		}
 		else {
-			m_modelRole = "N/A";
+			m_modelRole = _T("N/A");
 		}
 	}
 	catch (hresult_exception &){
@@ -343,7 +343,7 @@
 	if (height < 0) {
 		height = -MulDiv(height, 72, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY));
 	}
-	m_anFont.Format("%s, %d, %s%s", m_anLogFont.lfFaceName, height, m_anLogFont.lfWeight <= 500 ? "Regular" : "Bold", m_anLogFont.lfItalic ? ", Italic" : "");
+	m_anFont.Format(_T("%s, %d, %s%s"), m_anLogFont.lfFaceName, height, m_anLogFont.lfWeight <= 500 ? _T("Regular") : _T("Bold"), m_anLogFont.lfItalic ? _T(", Italic") : _T(""));
 }
 
 void CAnnotationBrowserDlg::SavePanelToNode(CAnnotationNode *node) {

Modified: trunk/GME/MgaUtil/AnnotationNode.cpp
==============================================================================
--- trunk/GME/MgaUtil/AnnotationNode.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/AnnotationNode.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -68,7 +68,7 @@
 		COMTHROW(m_regNode->get_SubNodeByName(lfName, &lfNode));
 		if (lfNode != NULL) {
 			COMTHROW(lfNode->get_Value(&bstr));
-			if (bstr == "1")
+			if (bstr == L"1")
 				m_canBeRederived = true;
 		}
 	}
@@ -85,7 +85,7 @@
 	}
 	catch (hresult_exception &) {
 		ASSERT(("Error while reading annotation from registry.", false));
-		m_name = "ERROR!!!";
+		m_name = _T("ERROR!!!");
 	}
 	
 	// Annotation text
@@ -97,7 +97,7 @@
 	}
 	catch (hresult_exception &) {
 		ASSERT(("Error while reading annotation from registry.", false));
-		m_text = "Unable to read annotation text.";
+		m_text = _T("Unable to read annotation text.");
 	}
 
 	// 'Inheritable'
@@ -109,7 +109,7 @@
 		COMTHROW(m_regNode->get_SubNodeByName(lfName, &lfNode));
 		if (lfNode != NULL) {
 			COMTHROW(lfNode->get_Value(&bstr));
-			if (bstr == "1")
+			if (bstr == L"1")
 				m_inheritable = true;
 		}
 	}
@@ -126,7 +126,7 @@
 		COMTHROW(m_regNode->get_SubNodeByName(lfName, &lfNode));
 		if (lfNode != NULL) {
 			COMTHROW(lfNode->get_Value(&bstr));
-			if (bstr == "1")
+			if (bstr == L"1")
 				m_hidden = true;
 		}
 	}
@@ -261,7 +261,7 @@
 		COMTHROW(m_regNode->get_SubNodeByName(lfName, &lfNode));
 		if (lfNode != NULL) {
 			COMTHROW(lfNode->get_Value(&bstr));
-			if (bstr == "1")
+			if (bstr == L"1")
 				m_bGradientFill = true;
 			else
 				m_bGradientFill = false;
@@ -299,7 +299,7 @@
 		COMTHROW(m_regNode->get_SubNodeByName(lfName, &lfNode));
 		if (lfNode != NULL) {
 			COMTHROW(lfNode->get_Value(&bstr));
-			if (bstr == "1")
+			if (bstr == L"1")
 				m_bCastShadow = true;
 			else
 				m_bCastShadow = false;
@@ -356,7 +356,7 @@
 		COMTHROW(m_regNode->get_SubNodeByName(lfName, &lfNode));
 		if (lfNode != NULL) {
 			COMTHROW(lfNode->get_Value(&bstr));
-			if (bstr == "1")
+			if (bstr == L"1")
 				m_bRoundCornerRect = true;
 			else
 				m_bRoundCornerRect = false;
@@ -510,7 +510,7 @@
 	// either broken in the past (canBeRederived) or broken right now(broken_inh)
 	if( m_canBeRederived || broken_inheritance) {
 		try {
-			CComBSTR bstr("1");
+			CComBSTR bstr(L"1");
 			CComPtr<IMgaRegNode> lfNode;
 			CComBSTR lfName(AN_BROKEN_DERIV);
 			COMTHROW(m_regNode->get_SubNodeByName(lfName, &lfNode));
@@ -524,7 +524,7 @@
 	// Store 'inheritable' preference
 	{
 		try {
-			CString str(m_inheritable?"1":"0");
+			CString str(m_inheritable?_T("1"):_T("0"));
 			CComBSTR bstr(str);
 			CComPtr<IMgaRegNode> lfNode;
 			CComBSTR lfName(AN_INHERITABLE);
@@ -539,7 +539,7 @@
 	// Store 'hidden' preference
 	{
 		try {
-			CString str(m_hidden?"1":"0");
+			CString str(m_hidden?_T("1"):_T("0"));
 			CComBSTR bstr(str);
 			CComPtr<IMgaRegNode> lfNode;
 			CComBSTR lfName(AN_HIDDEN);
@@ -654,7 +654,7 @@
 	// Store 'gradientfill' preference
 	{
 		try {
-			CString str(m_bGradientFill ? "1" : "0");
+			CString str(m_bGradientFill ? _T("1") : _T("0"));
 			CComBSTR bstr(str);
 			CComPtr<IMgaRegNode> lfNode;
 			CComBSTR lfName(AN_GRADIENTFILL_PREF);
@@ -685,7 +685,7 @@
 	// Store 'castshadow' preference
 	{
 		try {
-			CString str(m_bCastShadow ? "1" : "0");
+			CString str(m_bCastShadow ? _T("1") : _T("0"));
 			CComBSTR bstr(str);
 			CComPtr<IMgaRegNode> lfNode;
 			CComBSTR lfName(AN_CASTSHADOW_PREF);
@@ -732,7 +732,7 @@
 	// Store 'roundcornerrect' preference
 	{
 		try {
-			CString str(m_bRoundCornerRect ? "1" : "0");
+			CString str(m_bRoundCornerRect ? _T("1") : _T("0"));
 			CComBSTR bstr(str);
 			CComPtr<IMgaRegNode> lfNode;
 			CComBSTR lfName(AN_ROUNDCORNERRECT_PREF);
@@ -796,7 +796,7 @@
 					aspValStr = AN_VISIBLE_DEFAULT;
 				}
 				else {
-					aspValStr.Format("%d,%d", m_aspects[aspIdx].m_loc.x, m_aspects[aspIdx].m_loc.y);
+					aspValStr.Format(_T("%d,%d"), m_aspects[aspIdx].m_loc.x, m_aspects[aspIdx].m_loc.y);
 				}
 				CComBSTR  aspVal(aspValStr);
 				COMTHROW(aspNode->put_Value(aspVal));

Modified: trunk/GME/MgaUtil/AnnotationUtil.cpp
==============================================================================
--- trunk/GME/MgaUtil/AnnotationUtil.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/AnnotationUtil.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -70,12 +70,12 @@
 	for (int i = 0; i < str.GetLength(); i++) {
 		if (str[i] == '\x0A') {
 			if (i > 0 && str[i - 1] != '\x0D')
-				outStr.Append("\x0D");
+				outStr.Append(_T("\x0D"));
 		}
 		outStr.Append(CString(str[i]));
 		if (str[i] == '\x0D') {
 			if (i < str.GetLength() - 1 && str[i + 1] != '\x0A')
-				outStr.Append("\x0A");
+				outStr.Append(_T("\x0A"));
 		}
 	}
 	return outStr;
@@ -84,7 +84,7 @@
 CString CAnnotationUtil::ResolveNewLinesToLF(const CString& str)
 {
 	CString outStr = str;
-	outStr.Replace("\x0D\x0A", "\x0A");
-	outStr.Replace("\x0D", "\x0A");
+	outStr.Replace(_T("\x0D\x0A"), _T("\x0A"));
+	outStr.Replace(_T("\x0D"), _T("\x0A"));
 	return outStr;
 }

Modified: trunk/GME/MgaUtil/ClosureDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/ClosureDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/ClosureDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -138,7 +138,7 @@
 	m_ctrlPartOfFolders.EnableWindow( FALSE);
 	m_ctrlPartOfModels.EnableWindow( FALSE);
 
-	m_strOutputFile = "Closure.xme";
+	m_strOutputFile = _T("Closure.xme");
 
 	m_ctrlOutputFile.EnableWindow( m_outputOption);
 	m_ctrlBrowse.EnableWindow( m_outputOption);
@@ -153,7 +153,7 @@
 	if( m_iMarkVal != -1)
 	{
 		TCHAR buf[12];
-		_stprintf( buf, "%i", m_iMarkVal);
+		_stprintf( buf, _T("%i"), m_iMarkVal);
 		m_ctrlMarkVal.SetWindowText( buf);
 	}
 
@@ -185,7 +185,7 @@
 	TCHAR buf[12];
 	m_ctrlMarkVal.GetWindowText( buf, 11);
 
-	if( 1 != _stscanf( buf, "%i", &m_iMarkVal))
+	if( 1 != _stscanf( buf, _T("%i"), &m_iMarkVal))
 		m_iMarkVal = -1;
 
 	CDialog::OnOK();
@@ -196,9 +196,9 @@
 {
 	UpdateData( TRUE);
 	CWaitCursor wait;
-	CFileDialog dlg(FALSE, "xme", "Closure.xme",
+	CFileDialog dlg(FALSE, _T("xme"), _T("Closure.xme"),
 		OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
-		"GME Exported Files (*.xme;*.xml)|*.xme; *.xml|All Files (*.*)|*.*||");
+		_T("GME Exported Files (*.xme;*.xml)|*.xme; *.xml|All Files (*.*)|*.*||"));
 	if( dlg.DoModal() == IDOK) 
 	{
 		m_strOutputFile = dlg.GetPathName();

Modified: trunk/GME/MgaUtil/ClosureRes.h
==============================================================================
--- trunk/GME/MgaUtil/ClosureRes.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/ClosureRes.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -18,7 +18,7 @@
 // Construction
 public:
 	CClosureRes(CWnd* pParent = NULL);   // standard constructor
-	std::vector< std::string >	m_metaKindsAndFolders;
+	std::vector< std::wstring >	m_metaKindsAndFolders;
 
 // Dialog Data
 	//{{AFX_DATA(CClosureRes)

Modified: trunk/GME/MgaUtil/CompDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/CompDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/CompDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -32,7 +32,7 @@
 	//}}AFX_DATA_INIT
 
 	type = COMPONENTTYPE_ALL;
-	onOKoper = "Close";
+	onOKoper = _T("Close");
 
 	firstResize = true;
 }
@@ -105,7 +105,7 @@
 	{
 		if( !CUACUtils::isVistaOrLater() ) {
 			CRegKey accessTest;
-			if (accessTest.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\GME", KEY_READ | KEY_WRITE) == ERROR_ACCESS_DENIED) {
+			if (accessTest.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\GME"), KEY_READ | KEY_WRITE) == ERROR_ACCESS_DENIED) {
 				GetDlgItem(IDC_RADIOSYS)->EnableWindow(false);
 				GetDlgItem(IDC_RADIOBOTH)->EnableWindow(false);
 			}
@@ -118,19 +118,19 @@
 		LV_COLUMN lvc;
 		lvc.mask = LVCF_WIDTH | LVCF_TEXT;
 
-		lvc.pszText = "Name";
+		lvc.pszText = _T("Name");
 		lvc.cx = 150;
 		VERIFYTHROW( m_list.InsertColumn(0, &lvc) != -1 );
 
-		lvc.pszText = "Type";
+		lvc.pszText = _T("Type");
 		lvc.cx = 80;
 		VERIFYTHROW( m_list.InsertColumn(1, &lvc) != -1 );
 
-		lvc.pszText = "ProgID";
+		lvc.pszText = _T("ProgID");
 		lvc.cx = 200;
 		VERIFYTHROW( m_list.InsertColumn(2, &lvc) != -1 );
 
-		lvc.pszText = "Path";
+		lvc.pszText = _T("Path");
 		lvc.cx = 300;
 		VERIFYTHROW( m_list.InsertColumn(3, &lvc) != -1 );
 
@@ -146,7 +146,7 @@
 		RefreshShieldIcons();
 		
 	}
-	MSGCATCH("Error while initializing CompDlg",;)
+	MSGCATCH(_T("Error while initializing CompDlg"),;)
 
 	return TRUE;  // return TRUE unless you set the focus to a control
 	              // EXCEPTION: OCX Property Pages should return FALSE
@@ -200,8 +200,8 @@
 		HRESULT hr = registrar->QueryComponent(progids[i], &qtype, PutOut(desc), REGACCESS_PRIORITY );
 		if(hr != S_OK) {
 			err_ass = true;
-			desc = L"???";
-			localDllDispPath = L"???";
+			desc = CComBstrObj(L"???");
+			localDllDispPath = CComBstrObj(L"???");
 			qtype = COMPONENTTYPE_NONE;
 		}
 		else {
@@ -218,7 +218,7 @@
 
 			HRESULT hr = registrar->GetLocalDllPathDisp(progids[i], PutOut(localDllDispPath));
                         if (SUCCEEDED(hr))
-                                localDllDispPathStr = (const char*)PutInCString(localDllDispPath);
+                                localDllDispPathStr = (const TCHAR*)PutInCString(localDllDispPath);
 /*#define BUFSIZE 1024
 			TCHAR buffer[BUFSIZE]=TEXT("");
 			DWORD retval = GetFullPathName(localDllDispPathStr, BUFSIZE, buffer, NULL);
@@ -236,11 +236,11 @@
 		switch(qtype & COMPONENTTYPE_ALL)
 		{
 		case COMPONENTTYPE_INTERPRETER:
-			ctype = "Interpreter";
+			ctype = _T("Interpreter");
 			break;
 
 		case COMPONENTTYPE_ADDON:
-			ctype = "Add-on";
+			ctype = _T("Add-on");
 
 			if(parameter.vt == VT_BSTR) {
 				CComBSTR l = parameter.bstrVal;
@@ -257,11 +257,11 @@
 			break;
 
 		case COMPONENTTYPE_PLUGIN:
-			ctype = "Plug-in";
+			ctype = _T("Plug-in");
 			break;
 
 		default:
-			ctype = "???";
+			ctype = _T("???");
 		}
 
 		VERIFYTHROW( m_list.SetItemText(index, 1, ctype) != 0 );
@@ -286,11 +286,11 @@
 		HRESULT hr = registrar->IsAssociated(PutInBstr(progid), PutInBstr(paradigm), &is_ass, &can_ass, REGACCESS_PRIORITY);
 		ASSERT(SUCCEEDED(hr));
 		if (SUCCEEDED(hr) && is_ass == VARIANT_TRUE) {
-			m_enable_disable.SetWindowTextA("Disable");
+			m_enable_disable.SetWindowText(_T("Disable"));
 			return;
 		}
 	}
-	m_enable_disable.SetWindowTextA("Enable");
+	m_enable_disable.SetWindowText(_T("Enable"));
 }
 
 void CCompDlg::OnOK() 
@@ -349,7 +349,7 @@
 			}
 
 			if (!registrar) {
-				DisplayError("Unable to remove component", registrarHr);
+				DisplayError(_T("Unable to remove component"), registrarHr);
 				return;
 			}
 
@@ -361,19 +361,19 @@
 			switch(regacc_translate(m_accessmode)) {
 				case REGACCESS_USER:
 					if (S_OK == registrar->QueryComponent(PutInBstr(progid), &type, PutOut(desc), REGACCESS_SYSTEM)) {
-						AfxMessageBox("Warning: Component is still present in system registry");
+						AfxMessageBox(_T("Warning: Component is still present in system registry"));
 					}
 					break;
 				case REGACCESS_SYSTEM:
 					if (S_OK == registrar->QueryComponent(PutInBstr(progid), &type, PutOut(desc), REGACCESS_USER)) {
-						AfxMessageBox("Warning: Component is still present in user registry");
+						AfxMessageBox(_T("Warning: Component is still present in user registry"));
 					}
 					break;
 			}
 			ResetItems();
 		}
 	}
-	MSGCATCH("Error while removing component",;)
+	MSGCATCH(_T("Error while removing component"),;)
 }
 
 
@@ -398,38 +398,38 @@
 			}
 
 			if (!registrar) {
-				DisplayError("Unable to enable/disable component", registrarHr);
+				DisplayError(_T("Unable to enable/disable component"), registrarHr);
 				return;
 			}
 
 			HRESULT hr = registrar->IsAssociated(progid, PutInBstr(paradigm), &is_ass, &can_ass, REGACCESS_PRIORITY);
 			if (hr != S_OK)
-				DisplayError("Cannot enable/disable this component", hr);
+				DisplayError(_T("Cannot enable/disable this component"), hr);
 			CString enable_or_disable;
 			if (is_ass) {
-				enable_or_disable = "disable";
+				enable_or_disable = _T("disable");
 				hr = registrar->Disassociate(progid, PutInBstr(paradigm), regacc_translate(m_accessmode));
 			} else {
-				enable_or_disable = "enable";
+				enable_or_disable = _T("enable");
 				if(!can_ass) {
-					if(AfxMessageBox("This component reports to be incompatible with the paradigm\nAre you sure you want to proceed?", MB_YESNO) != IDYES) return;
+					if(AfxMessageBox(_T("This component reports to be incompatible with the paradigm\nAre you sure you want to proceed?"), MB_YESNO) != IDYES) return;
 				}
 				hr = (registrar->Associate(progid, PutInBstr(paradigm), regacc_translate(m_accessmode)) );
 			}
 			if(hr != S_OK) {
-				DisplayError("The " + enable_or_disable + " operation failed", hr);
+				DisplayError(_T("The ") + enable_or_disable + _T(" operation failed"), hr);
 			}
 
 			ResetItems();
 		}
 	}
-	MSGCATCH("Error while (dis)associating component",;)
+	MSGCATCH(_T("Error while (dis)associating component"),;)
 }
 
-static char filter[] = 
-	"Component Files (*.dll; *.ocx)|*.dll; *.ocx|"
-	"Pattern Files (*.pat)|*.pat|"
-	"All Files (*.*)|*.*||";
+static TCHAR filter[] = 
+	_T("Component Files (*.dll; *.ocx)|*.dll; *.ocx|")
+	_T("Pattern Files (*.pat)|*.pat|")
+	_T("All Files (*.*)|*.*||");
 
 void CCompDlg::OnInstall() 
 {
@@ -445,10 +445,10 @@
 
 		CString ext = dlg.GetFileExt();
 
-		if(ext.CompareNoCase("DLL") == 0) {
+		if(ext.CompareNoCase(_T("DLL")) == 0) {
 				RegisterDll(dlg.GetPathName());
 		}
-		else if(ext.CompareNoCase("PAT") == 0){
+		else if(ext.CompareNoCase(_T("PAT")) == 0){
 				RegisterPattern(dlg.GetPathName());
 		}
 		else {
@@ -456,7 +456,7 @@
 		}
 		ResetItems();
 	}
-	MSGCATCH("Error while installing component",;)
+	MSGCATCH(_T("Error while installing component"),;)
 }
 
 void CCompDlg::RegisterDll(const CString &path)
@@ -470,12 +470,12 @@
 	}
 
 	if (!registrar) {
-		DisplayError("Unable to create component registrar", hr);
+		DisplayError(_T("Unable to create component registrar"), hr);
 		return;
 	}
 	hr = registrar->RegisterComponentLibrary(PutInBstr(path), regacc_translate(m_accessmode));
 	if (FAILED(hr)) {
-		DisplayError("Unable to register component", hr);
+		DisplayError(_T("Unable to register component"), hr);
 	}
 }
 
@@ -483,12 +483,14 @@
 void CCompDlg::RegisterPattern(const CString &path)
 {
 
+	// FIXME: should use TCHAR
 	char buf[300];
 	{
+		// FIXME: will this read a UTF-16 file?
 		std::ifstream fin(path, std::ios::in);//z! ios::nocreate used previously, but if opened for read it won't create in this way
 		if(fin.good()) fin.getline(buf, 300);
 		if(!fin.good()) {
-			AfxMessageBox("Could not open or read the specified file: " + path);
+			AfxMessageBox(_T("Could not open or read the specified file: ") + path);
 			return;
 		}
 	}
@@ -504,15 +506,15 @@
 	}
 
 	if (!registrar) {
-		DisplayError("Unable to register pattern component", registrarHr);
+		DisplayError(_T("Unable to register pattern component"), registrarHr);
 		return;
 	}
 
 	CCompInfoDlg dlg(registrar);
 	dlg.m_filename = path;
 
-	char paren, info[200];
-	if(sscanf(buf, " $!COMMENT( %[^)]%c", info, &paren) != 2 || paren != ')') {
+	TCHAR paren, info[200];
+	if(_stscanf_s(CString(buf), _T(" $!COMMENT( %[^)]%c"), info, &paren) != 2 || paren != ')') {
 nothing_understood:
 		AfxMessageBox("Cannot read component info in file " + path);
 	}
@@ -520,7 +522,7 @@
 	
 	
 // NAME=nnn, DESCRIPTION=ddd, PROGID=ii, PARADIGM=xx,yy, VERSION=vvv,
-		char *p = strtok(info,",");
+		TCHAR *p = _tcstok(info, _T(","));
 		bool ready = false;
 		bool parsing_paradigm = false;
 		bool good = false;
@@ -542,21 +544,21 @@
 				i_name.TrimRight();
 				CString i_value = item.Mid(k1+1);
 				i_value.TrimLeft();
-				if(i_name.Compare("NAME") == 0) {
+				if(i_name.Compare(_T("NAME")) == 0) {
 					dlg.m_name = i_value;
 				}
-				else if(i_name.Compare("DESCRIPTION") == 0 ||
-					i_name.Compare("DESC") == 0) {
+				else if(i_name.Compare(_T("DESCRIPTION")) == 0 ||
+					i_name.Compare(_T("DESC")) == 0) {
 					dlg.m_description = i_value;
 				}
-				else if(i_name.Compare("PROGID") == 0) {
+				else if(i_name.Compare(_T("PROGID")) == 0) {
 					dlg.m_progid = i_value;
 				}
-				else if(i_name.Compare("PARADIGM") == 0) {
+				else if(i_name.Compare(_T("PARADIGM")) == 0) {
 					dlg.m_paradigm = i_value;
 					parsing_paradigm  = true;
 				}
-				else if(i_name.Compare("VERSION") == 0) {
+				else if(i_name.Compare(_T("VERSION")) == 0) {
 					dlg.m_version = i_value;
 				}
 				else goto item_err;
@@ -564,26 +566,26 @@
 			}
 			else {
 				if(parsing_paradigm) {
-					dlg.m_paradigm += "," + item;
+					dlg.m_paradigm += _T(",") + item;
 				}
 				else {
 	item_err:
-					AfxMessageBox("Syntax error parsing component info: " + item); 
+					AfxMessageBox(_T("Syntax error parsing component info: ") + item); 
 				}
 			}
-			p = strtok(NULL, ",");
+			p = _tcstok(NULL, _T(","));
 		}
 		if(!good) goto nothing_understood;
 	}
 
 	if(dlg.m_progid.IsEmpty() && !dlg.m_name.IsEmpty()) {
-		dlg.m_progid = "MGA.Pattern." + dlg.m_name;
+		dlg.m_progid = _T("MGA.Pattern.") + dlg.m_name;
 	}
 	if(dlg.m_description.IsEmpty() && !dlg.m_name.IsEmpty()) {
 		dlg.m_description = dlg.m_name;
 	}
 	if(dlg.m_version.IsEmpty()) {
-		dlg.m_version = "1.0";
+		dlg.m_version = _T("1.0");
 	}
 
 	if(dlg.DoModal() != IDOK) return;
@@ -595,17 +597,17 @@
 	COMTHROW(registrar->RegisterComponent(progid, 
 				(componenttype_enum)(COMPONENTTYPE_INTERPRETER|COMPONENTTYPE_SCRIPT),
 				PutInBstr(dlg.m_description), acmode));
-	COMTHROW(registrar->put_ComponentExtraInfo(acmode, progid, CComBSTR("Name"), CComBSTR(dlg.m_name)));
-	COMTHROW(registrar->put_ComponentExtraInfo(acmode, progid, CComBSTR("ExecEngine"), CComBSTR(dlg.engine)));
-	COMTHROW(registrar->put_ComponentExtraInfo(acmode, progid, CComBSTR("ScriptFile"), CComBSTR(path)));
-	COMTHROW(registrar->put_ComponentExtraInfo(acmode, progid, CComBSTR("ScriptVersion"), CComBSTR(dlg.m_version)));
-
-	char *mpardup = (char *)alloca(dlg.m_paradigm.GetLength()+1);
-	strcpy(mpardup, dlg.m_paradigm);
-	const char *par = strtok(mpardup,"\t ,");
+	COMTHROW(registrar->put_ComponentExtraInfo(acmode, progid, CComBSTR(L"Name"), CComBSTR(dlg.m_name)));
+	COMTHROW(registrar->put_ComponentExtraInfo(acmode, progid, CComBSTR(L"ExecEngine"), CComBSTR(dlg.engine)));
+	COMTHROW(registrar->put_ComponentExtraInfo(acmode, progid, CComBSTR(L"ScriptFile"), CComBSTR(path)));
+	COMTHROW(registrar->put_ComponentExtraInfo(acmode, progid, CComBSTR(L"ScriptVersion"), CComBSTR(dlg.m_version)));
+
+	TCHAR *mpardup = (TCHAR *)alloca((dlg.m_paradigm.GetLength()+1)*sizeof(TCHAR));
+	_tcscpy(mpardup, dlg.m_paradigm);
+	const TCHAR *par = _tcstok(mpardup,_T("\t ,"));
 	while(par) {
 		COMTHROW(registrar->Associate(progid, CComBSTR(par), acmode));
-		par = strtok(NULL, "\t ,");
+		par = _tcstok(NULL, _T("\t ,"));
 	}
 }
 

Modified: trunk/GME/MgaUtil/CompInfoDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/CompInfoDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/CompInfoDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -60,10 +60,10 @@
 	int v;
 
 	if(m_progid.Find('.') < 0) {
-		AfxMessageBox("ProgID must contain at least one '.'");
+		AfxMessageBox(_T("ProgID must contain at least one '.'"));
 	}
-	else if(sscanf(m_version, "%d", &v) != 1 || v <= 0) {
-		AfxMessageBox("Version ID must start with a number > 0");
+	else if(_stscanf_s(m_version, _T("%d"), &v) != 1 || v <= 0) {
+		AfxMessageBox(_T("Version ID must start with a number > 0"));
 	}
 	else {
 		m_execeng.GetLBText(m_execeng.GetCurSel(),engine);
@@ -89,7 +89,7 @@
 			if(hr != S_OK || ! (type & COMPONENTTYPE_EXECENGINE)) continue;
 			CString name(progids[i]);
 			int p = m_execeng.AddString(name);
-			if(name.Find("attern") >= 0) sel = p;
+			if(name.Find(_T("attern")) >= 0) sel = p;
 	}
 	m_execeng.SetCurSel(sel);
 	return TRUE;  // return TRUE unless you set the focus to a control

Modified: trunk/GME/MgaUtil/ConnPropertiesDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/ConnPropertiesDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/ConnPropertiesDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -46,7 +46,7 @@
 	//}}AFX_DATA_INIT
 	isType = typ;
 	editflag = false;
-	m_relid.Format("0x%08X", relid);
+	m_relid.Format(_T("0x%08X"), relid);
 }
 
 

Modified: trunk/GME/MgaUtil/DirDialog.cpp
==============================================================================
--- trunk/GME/MgaUtil/DirDialog.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/DirDialog.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -198,7 +198,7 @@
         DWORD attr = GetFileAttributes(ss);
         if (attr == 0xFFFFFFFF)
         {
-            const char *ss2;
+            const TCHAR *ss2;
 
             // Directory not found but maybe it's an invalid drive
             _TCHAR rootdir[4] = _T("?:\\");
@@ -211,7 +211,7 @@
                 return;
             }
             else if (len >= 2 && ss[0] == '\\' && ss[1] == '\\' && 
-                     ( (ss2 = strchr((const char *)ss+2, '\\')) == NULL || strchr(ss2+1, '\\') == NULL) )
+                     ( (ss2 = _tcschr((const TCHAR *)ss+2, '\\')) == NULL || _tcschr(ss2+1, '\\') == NULL) )
             {
                 AfxMessageBox(ss + _T("\nThis is not a valid folder."));
                 pEdit->SetFocus();
@@ -221,32 +221,29 @@
             {
                 // Appears to be a valid drive (or relative path)
                 CString mess(ss);
-                mess += _T("\nThis folder does not exist.\n\n"
-                      "Do you want to create it?");
+                mess += _T("\nThis folder does not exist.\n\n")
+                      _T("Do you want to create it?");
                 if (AfxMessageBox(mess, MB_YESNO) == IDYES)
                 {
-                    // MakeSureDirectoryPathExists is not part of Windows but is
-                    // in the IMAGHLP.DLL which is always present.  This call
-                    // requires linking with IMAGHLP.LIB.
-                    if (!::MakeSureDirectoryPathExists(ss + _T("\\")))
+                    if (!::SHCreateDirectoryEx(NULL, ss + _T("\\"), NULL))
                     {
                         switch (GetDriveType(rootdir))
                         {
                         case DRIVE_CDROM:
-                            AfxMessageBox(_T("You cannot create this folder\n"
-                                          "as the CD ROM medium is read-only."));
+                            AfxMessageBox(_T("You cannot create this folder\n")
+                                          _T("as the CD ROM medium is read-only."));
                             break;
                         case DRIVE_REMOVABLE:
-                            AfxMessageBox(_T("You cannot create this folder.\n"
-                                          "The medium may be write-protected."));
+                            AfxMessageBox(_T("You cannot create this folder.\n")
+                                          _T("The medium may be write-protected."));
                             break;
                         case DRIVE_REMOTE:
-                            AfxMessageBox(_T("You do not have permission to create\n"
-                                          "this folder on the network."));
+                            AfxMessageBox(_T("You do not have permission to create\n")
+                                          _T("this folder on the network."));
                             break;
                         default:
-                            AfxMessageBox(_T("You do not have permission\n"
-                                          "to create this folder."));
+                            AfxMessageBox(_T("You do not have permission\n")
+                                          _T("to create this folder."));
                             break;
                         }
                         pEdit->SetFocus();
@@ -359,7 +356,7 @@
         int len = ss.GetLength();
 
         // Remove trailing backslash unless root directory or network root
-        if (strcmp(ss,"\\") != 0 && strcmp(ss,"\\\\") != 0 && strcmp((const char *)ss+1,":\\") != 0 &&
+        if (_tcscmp(ss,_T("\\")) != 0 && _tcscmp(ss,_T("\\\\")) != 0 && _tcscmp((const TCHAR *)ss+1,_T(":\\")) != 0 &&
             len > 0 && ss[len-1] == '\\' )
         {
             ss = ss.Left(--len);
@@ -367,7 +364,7 @@
 
         if (len == 0 || 
             len == 1 && ss[0] == '\\' ||
-            len >= 2 && ss[0] == '\\' && ss[1] == '\\' && strchr((const char *)ss+2, '\\') == NULL ||
+            len >= 2 && ss[0] == '\\' && ss[1] == '\\' && _tcschr((const TCHAR *)ss+2, '\\') == NULL ||
             len == 2 && ss[1] == ':' ||
             len == 3 && ss[1] == ':' && ss[2] == '\\' )
         {
@@ -391,29 +388,29 @@
                 {
                     // Appears to be a valid drive (or relative path)
                     CString mess(ss);
-                    mess += _T("\nThis folder does not exist.\n\n"
-                          "Do you want to create it?");
+                    mess += _T("\nThis folder does not exist.\n\n")
+                          _T("Do you want to create it?");
                     if (AfxMessageBox(mess, MB_YESNO) == IDYES)
                     {
-                        if (!::MakeSureDirectoryPathExists(ss + _T("\\")))
+                        if (!::SHCreateDirectoryEx(NULL, ss + _T("\\"), NULL))
                         {
                             switch (GetDriveType(rootdir))
                             {
                             case DRIVE_CDROM:
-                                AfxMessageBox(_T("You cannot create this folder\n"
-                                              "as the CD ROM medium is read-only."));
+                                AfxMessageBox(_T("You cannot create this folder\n")
+                                              _T("as the CD ROM medium is read-only."));
                                 break;
                             case DRIVE_REMOVABLE:
-                                AfxMessageBox(_T("You cannot create this folder.\n"
-                                              "The medium may be write-protected."));
+                                AfxMessageBox(_T("You cannot create this folder.\n")
+                                              _T("The medium may be write-protected."));
                                 break;
                             case DRIVE_REMOTE:
-                                AfxMessageBox(_T("You do not have permission to create\n"
-                                              "this folder on the network."));
+                                AfxMessageBox(_T("You do not have permission to create\n")
+                                              _T("this folder on the network."));
                                 break;
                             default:
-                                AfxMessageBox(_T("You do not have permission or\n"
-                                              "otherwise cannot create this folder."));
+                                AfxMessageBox(_T("You do not have permission or\n")
+                                              _T("otherwise cannot create this folder."));
                                 break;
                             }
                             return;
@@ -428,7 +425,7 @@
             GetWindowText(ss);
             if (ss[ss.GetLength()-1] != '\\')
             {
-                ss += "\\";
+                ss += _T("\\");
                 SetWindowText(ss);
             }
             SetSel(ss.GetLength(), -1);
@@ -482,7 +479,7 @@
             int count = 0;                  // Number of matching directory names
             CString strMatch;               // The last directory found that matches
 
-            BOOL bContinue = ff.FindFile(ss + "*");
+            BOOL bContinue = ff.FindFile(ss + _T("*"));
 
             while (bContinue)
             {
@@ -716,7 +713,7 @@
     int len = m_strPath.GetLength();
     if (len > 0 && m_strPath[len-1] != '\\')
     {
-        m_strPath += "\\";
+        m_strPath += _T("\\");
         ++len;
     }
     pp->GetDlgItem(IDC_DIR)->SetWindowText(m_strPath);

Modified: trunk/GME/MgaUtil/FolderPropertiesDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/FolderPropertiesDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/FolderPropertiesDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -58,7 +58,7 @@
 //		view->BeginTransaction(true);
 		{
 			COMTHROW(folder->get_RelID(&relid));
-			m_relid.Format("0x%08X", relid);
+			m_relid.Format(_T("0x%08X"), relid);
 		}
 		UpdateData(FALSE);
 		{
@@ -80,7 +80,7 @@
 			kind.SetWindowText(txt);
 			metaref_type mid = 0;
 			COMTHROW(metaFolder->get_MetaRef(&mid));
-			txt.Format("%ld",(long)mid);
+			txt.Format(_T("%ld"),(long)mid);
 			metaid.SetWindowText(txt);
 		}
 		{
@@ -93,7 +93,7 @@
 		{
 			ID_type id = 0;
  			COMTHROW(folder->get_ID(&id));
-  			CString txt = CString("")+id;
+  			CString txt = CString(_T(""))+id;
   			objectid.SetWindowText(txt);
 		}
 

Modified: trunk/GME/MgaUtil/GUIDCreate.cpp
==============================================================================
--- trunk/GME/MgaUtil/GUIDCreate.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/GUIDCreate.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -1,7 +1,7 @@
 #include "stdafx.h"
 #include "GUIDCreate.h"
 
-/*static*/ const char * GuidCreate::format_str = "{%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}";
+/*static*/ const TCHAR * GuidCreate::format_str = _T("{%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}");
 
 CComBSTR GuidCreate::newGuid()
 {

Modified: trunk/GME/MgaUtil/GUIDCreate.h
==============================================================================
--- trunk/GME/MgaUtil/GUIDCreate.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/GUIDCreate.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -4,7 +4,7 @@
 class GuidCreate
 {
 public:
-	static const char * format_str;
+	static const TCHAR * format_str;
 	static CComBSTR newGuid();
 };
 

Modified: trunk/GME/MgaUtil/GmeDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/GmeDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/GmeDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -16,27 +16,27 @@
 static char THIS_FILE[] = __FILE__;
 #endif
 
-/*static*/ const char* CGmeDlg::m_strZWidth			= "Fit Width";
-/*static*/ const char* CGmeDlg::m_strZHeight		= "Fit Height";
-/*static*/ const char* CGmeDlg::m_strZAll			= "Fit All";
-
-/*static*/ const char* CGmeDlg::m_strFmtStrg		= "%g";
-/*static*/ const char* CGmeDlg::m_strFmtStrf		= "%f";
-/*static*/ const char* CGmeDlg::m_strFmtStrE		= "%E";
-/*static*/ const char* CGmeDlg::m_strFmtStre		= "%e";
-/*static*/ const char* CGmeDlg::m_strFmtStrg2		= "%.12g"; // the default one
-/*static*/ const char* CGmeDlg::m_strFmtStrf2		= "%lf";
-
-/*static*/ const char* CGmeDlg::m_strESStrD			= "No Smooth";
-/*static*/ const char* CGmeDlg::m_strESStrHS		= "High Speed Mode";
-/*static*/ const char* CGmeDlg::m_strESStrHQ		= "High Quality Mode";
-
-/*static*/ const char* CGmeDlg::m_strFSStrSD		= "System Default";
-/*static*/ const char* CGmeDlg::m_strFSStrSBPPGF	= "Single Bit Per Pixel Grid Fit";
-/*static*/ const char* CGmeDlg::m_strFSStrSBPP		= "Single Bit Per Pixel";
-/*static*/ const char* CGmeDlg::m_strFSStrAAGF		= "Anti Alias Grid Fit";
-/*static*/ const char* CGmeDlg::m_strFSStrAA		= "Anti Alias";
-/*static*/ const char* CGmeDlg::m_strFSStrCTGF		= "Clear Type Grid Fit";
+/*static*/ const TCHAR* CGmeDlg::m_strZWidth			= _T("Fit Width");
+/*static*/ const TCHAR* CGmeDlg::m_strZHeight		= _T("Fit Height");
+/*static*/ const TCHAR* CGmeDlg::m_strZAll			= _T("Fit All");
+
+/*static*/ const TCHAR* CGmeDlg::m_strFmtStrg		= _T("%g");
+/*static*/ const TCHAR* CGmeDlg::m_strFmtStrf		= _T("%f");
+/*static*/ const TCHAR* CGmeDlg::m_strFmtStrE		= _T("%E");
+/*static*/ const TCHAR* CGmeDlg::m_strFmtStre		= _T("%e");
+/*static*/ const TCHAR* CGmeDlg::m_strFmtStrg2		= _T("%.12g"); // the default one
+/*static*/ const TCHAR* CGmeDlg::m_strFmtStrf2		= _T("%lf");
+
+/*static*/ const TCHAR* CGmeDlg::m_strESStrD			= _T("No Smooth");
+/*static*/ const TCHAR* CGmeDlg::m_strESStrHS		= _T("High Speed Mode");
+/*static*/ const TCHAR* CGmeDlg::m_strESStrHQ		= _T("High Quality Mode");
+
+/*static*/ const TCHAR* CGmeDlg::m_strFSStrSD		= _T("System Default");
+/*static*/ const TCHAR* CGmeDlg::m_strFSStrSBPPGF	= _T("Single Bit Per Pixel Grid Fit");
+/*static*/ const TCHAR* CGmeDlg::m_strFSStrSBPP		= _T("Single Bit Per Pixel");
+/*static*/ const TCHAR* CGmeDlg::m_strFSStrAAGF		= _T("Anti Alias Grid Fit");
+/*static*/ const TCHAR* CGmeDlg::m_strFSStrAA		= _T("Anti Alias");
+/*static*/ const TCHAR* CGmeDlg::m_strFSStrCTGF		= _T("Clear Type Grid Fit");
 
 
 /////////////////////////////////////////////////////////////////////////////
@@ -108,18 +108,18 @@
 /////////////////////////////////////////////////////////////////////////////
 // CGmeDlg message handlers
 
-static char icofilter[] = "Icon files (*.ico;*.bmp)|*.ico;*.bmp|All Files (*.*)|*.*||";
-static char bakfilter[] = "Backup files (*.bak)|*.bak|All Files (*.*)|*.*||";
-static char exefilter[] = "Executable files (*.exe)|*.exe|All Files (*.*)|*.*||";
+static TCHAR icofilter[] = _T("Icon files (*.ico;*.bmp)|*.ico;*.bmp|All Files (*.*)|*.*||");
+static TCHAR bakfilter[] = _T("Backup files (*.bak)|*.bak|All Files (*.*)|*.*||");
+static TCHAR exefilter[] = _T("Executable files (*.exe)|*.exe|All Files (*.*)|*.*||");
 
 //AFX_MANAGE_STATE( AfxGetStaticModuleState()); 
 
 
-CString CGmeDlg::getDirectory( const CString& text = "Specify the icons directory")
+CString CGmeDlg::getDirectory( const CString& text = _T("Specify the icons directory"))
 {
 	BROWSEINFO bi;
 	TCHAR szDir[MAX_PATH];
-	CString Dir = "";
+	CString Dir = _T("");
 	LPITEMIDLIST pidl;
 	LPMALLOC pMalloc;	
 	OleInitialize(NULL);
@@ -147,10 +147,10 @@
 		}
 		else
 		{	// Selected 'Not to save'
-			return "";
+			return _T("");
 		}
 		Dir = szDir;
-		//Dir += "\\";
+		//Dir += _T("\\");
 	}
 	// end of getting directory info 
 	return Dir;
@@ -201,7 +201,7 @@
     HRESULT             hResult = S_OK;
 
 
-	m_ScriptEgines.InsertColumn( 0, "", LVCFMT_LEFT, 205, -1 );
+	m_ScriptEgines.InsertColumn( 0, _T(""), LVCFMT_LEFT, 205, -1 );
     memcpy(&ourCatID, &CATID_ActiveScript, sizeof(ourCatID));
 //    memcpy(&ourCatID, &CATID_ActiveScriptParse, sizeof(ourCatID));
 
@@ -226,7 +226,7 @@
         hResult = ProgIDFromCLSID(ourCLSID, &str);
 
         {
-			COLE2CT pszString(str);
+			CString pszString(str);
 			
 			LVITEM lvItem;
 			lvItem.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT;  
@@ -243,8 +243,9 @@
 			lvItem.iSubItem = 0;
 			lvItem.lParam = lvItem.iItem;
 
-			lvItem.pszText = (char*)pszString;
+			lvItem.pszText = pszString.GetBuffer(pszString.GetLength());
 			int ret = m_ScriptEgines.InsertItem( &lvItem );
+			pszString.ReleaseBuffer();
         }
     }
 	if (!sel)
@@ -274,7 +275,7 @@
 		m_isave = m_iconpath;
 		m_sysisave = m_sysiconpath;
 		CRegKey accessTest;
-		if (accessTest.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\GME", KEY_READ | KEY_WRITE) == ERROR_ACCESS_DENIED) {
+		if (accessTest.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\GME"), KEY_READ | KEY_WRITE) == ERROR_ACCESS_DENIED) {
 			GetDlgItem(IDC_SYSICONPATH)->EnableWindow(false);
 			GetDlgItem(IDC_ADDSYSICONPATH)->EnableWindow(false);
 		}
@@ -322,7 +323,7 @@
 
 		// Script
 		COMTHROW( registrar->get_ScriptEngine(REGACCESS_USER, PutOut(m_scriptEngine)) );
-		if (m_scriptEngine == "")
+		if (m_scriptEngine == _T(""))
 			m_scriptEngine = _T("JScript");
 
 		// Zoom
@@ -362,7 +363,7 @@
 		// Font smoothing mode
 		fillFontSmoothModeComboBox();
 	}
-	MSGCATCH("Error while initializing GmeDlg",;)
+	MSGCATCH(_T("Error while initializing GmeDlg"),;)
 
 	AutosaveControlManager();
 	ExtControlManager();
@@ -467,7 +468,7 @@
 	//dlg.DoModal();
 	UpdateData(TRUE);
 	//m_autosave_dir = dlg.GetPath();
-	m_autosave_dir = getDirectory("Select output directory for autosave");
+	m_autosave_dir = getDirectory(_T("Select output directory for autosave"));
 	UpdateData(FALSE);
 }
 
@@ -563,10 +564,10 @@
 		CString str;
 		if (m_zoomList[k] > 0)
 		{
-			char buff[100];
-			_itoa(m_zoomList[k], buff, 10);
+			TCHAR buff[100];
+			_itot(m_zoomList[k], buff, 10);
 			str = buff;
-			str += "%";
+			str += _T("%");
 		}
 		/*else	// commented out for a while (see COMMENT above)
 		{
@@ -604,10 +605,10 @@
 	CString str;
 	if (level > 0)
 	{
-		char buff[100];
-		_itoa(level, buff, 10);
+		TCHAR buff[100];
+		_itot(level, buff, 10);
 		str = buff;
-		str += "%";
+		str += _T("%");
 	}
 	/*else // for now do not accept: ZOOM_WIDTH, ZOOM_HEIGHT, ZOOM_ALL values from the registry, see COMMENT above
 	{
@@ -626,13 +627,13 @@
 	}*/
 	
 	if( str.IsEmpty())
-		str = "100%";
+		str = _T("100%");
 	return str;
 }
 
 CString CGmeDlg::getZoomValue()
 {
-	CString res("100");
+	CString res(_T("100"));
 	CWnd* zoom = 0;
 	zoom = GetDlgItem(IDC_ZOOMS);
 	if (zoom)
@@ -641,7 +642,7 @@
 		edit = (CEdit*)(zoom->GetDlgItem(1001));
 		if (edit)
 		{
-			char buff[100];
+			TCHAR buff[100];
 			edit->GetLine(0, buff, sizeof(buff)-1);
 
 			int zv = 0;
@@ -668,7 +669,7 @@
 			if( l != 1 || zv < ZOOM_MIN || zv > ZOOM_MAX)
 				zv = 100;
 
-			_itoa(zv, buff, 10);
+			_itot(zv, buff, 10);
 			res = buff;
 		}
 	}
@@ -733,8 +734,8 @@
 		edit = (CEdit*)( combo->GetDlgItem(1001));
 		if( edit)
 		{
-			char buff[100];
-			edit->GetLine(0, buff, sizeof(buff)-1);
+			TCHAR buff[100];
+			edit->GetLine(0, buff, sizeof(buff));
 			res = buff;
 		}
 	}
@@ -745,8 +746,8 @@
 {
 	CComboBox* sz_list = 0;
 	sz_list = (CComboBox*)GetDlgItem(IDC_UNDOSIZE);
-	sz_list->AddString("1");
-	sz_list->AddString("10");
+	sz_list->AddString(_T("1"));
+	sz_list->AddString(_T("10"));
 
 	CString regv = getUndoQueueSizeFromReg();
 	int pos = sz_list->FindStringExact( -1, regv);
@@ -761,14 +762,14 @@
 	CString queuesize;
 	COMTHROW( registrar->GetUndoQueueSize( REGACCESS_USER, PutOut( queuesize)) );
 	if( queuesize.IsEmpty())
-		queuesize = "10";
+		queuesize = _T("10");
 
 	return queuesize;
 }
 
 CString CGmeDlg::getUndoQueueSizeValue()
 {
-	CString res( "10");
+	CString res( _T("10"));
 	CWnd* combo = 0;
 	combo = GetDlgItem(IDC_UNDOSIZE);
 	if( combo)
@@ -777,9 +778,9 @@
 		edit = (CEdit*)( combo->GetDlgItem(1001));
 		if( edit)
 		{
-			char buff[100];
-			edit->GetLine(0, buff, sizeof(buff)-1);
-			int value = atoi( buff);
+			TCHAR buff[100];
+			edit->GetLine(0, buff, sizeof(buff));
+			int value = _ttoi( buff);
 			if( value > 0 && value < 100) // above 0 and below 100
 				res = buff;
 		}
@@ -827,8 +828,8 @@
 		edit = (CEdit*)(combo->GetDlgItem(1001));
 		if (edit)
 		{
-			char buff[100];
-			edit->GetLine(0, buff, sizeof(buff)-1);
+			TCHAR buff[100];
+			edit->GetLine(0, buff, sizeof(buff));
 			res = buff;
 		}
 	}
@@ -888,8 +889,8 @@
 		edit = (CEdit*)(combo->GetDlgItem(1001));
 		if (edit)
 		{
-			char buff[100];
-			edit->GetLine(0, buff, sizeof(buff)-1);
+			TCHAR buff[100];
+			edit->GetLine(0, buff, sizeof(buff));
 			res = buff;
 		}
 	}

Modified: trunk/GME/MgaUtil/GmeDlg.h
==============================================================================
--- trunk/GME/MgaUtil/GmeDlg.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/GmeDlg.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -88,21 +88,21 @@
 
 	int m_zoomList[MAX_ZOOM];
 
-	static const char* m_strZWidth;   // "Fit Width";
-	static const char* m_strZHeight;  // "Fit Height";
-	static const char* m_strZAll;     // "Fit All";
+	static const TCHAR* m_strZWidth;   // "Fit Width";
+	static const TCHAR* m_strZHeight;  // "Fit Height";
+	static const TCHAR* m_strZAll;     // "Fit All";
 
 	void fillZoomComboBox(int *list);
 	CString getZoomValueFromReg();
 	CString getZoomValue();
 	void setZoomValue(CString& val);
 
-	static const char* m_strFmtStrg;
-	static const char* m_strFmtStrf;
-	static const char* m_strFmtStre;
-	static const char* m_strFmtStrE;
-	static const char* m_strFmtStrg2;
-	static const char* m_strFmtStrf2;
+	static const TCHAR* m_strFmtStrg;
+	static const TCHAR* m_strFmtStrf;
+	static const TCHAR* m_strFmtStre;
+	static const TCHAR* m_strFmtStrE;
+	static const TCHAR* m_strFmtStrg2;
+	static const TCHAR* m_strFmtStrf2;
 
 	void fillFmtStrComboBox();
 	CString getFmtStrFromReg();
@@ -112,20 +112,20 @@
 	CString getUndoQueueSizeFromReg();
 	CString getUndoQueueSizeValue();
 
-	static const char* m_strESStrD;
-	static const char* m_strESStrHS;
-	static const char* m_strESStrHQ;
+	static const TCHAR* m_strESStrD;
+	static const TCHAR* m_strESStrHS;
+	static const TCHAR* m_strESStrHQ;
 
 	void fillEdgeSmoothModeComboBox();
 	CString getEdgeSmoothModeStrFromReg();
 	edgesmoothmode_enum getEdgeSmoothModeValue();
 
-	static const char* m_strFSStrSD;
-	static const char* m_strFSStrSBPPGF;
-	static const char* m_strFSStrSBPP;
-	static const char* m_strFSStrAAGF;
-	static const char* m_strFSStrAA;
-	static const char* m_strFSStrCTGF;
+	static const TCHAR* m_strFSStrSD;
+	static const TCHAR* m_strFSStrSBPPGF;
+	static const TCHAR* m_strFSStrSBPP;
+	static const TCHAR* m_strFSStrAAGF;
+	static const TCHAR* m_strFSStrAA;
+	static const TCHAR* m_strFSStrCTGF;
 
 	void fillFontSmoothModeComboBox();
 	CString getFontSmoothModeStrFromReg();

Modified: trunk/GME/MgaUtil/MakeClosure.cpp
==============================================================================
--- trunk/GME/MgaUtil/MakeClosure.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MakeClosure.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -692,15 +692,14 @@
 		COMTHROW( obj->get_RegistryValue( CComBSTR( m_markerNode), &buf0));
 
 		// check if the new marker appears already in the marker list
-		std::string str_buf;
-		CopyTo( buf0, str_buf);
+		std::wstring str_buf = buf0;
 
-		char buf1[12];
-		sprintf( buf1, ",%i", m_markWith);
-		std::string new_mrk( buf1);
+		TCHAR buf1[12];
+		swprintf_s( buf1, L",%i", m_markWith);
+		std::wstring new_mrk( buf1);
 
-		str_buf += ","; // will ease the eos comparison
-		new_mrk += ","; // and the exact match is guaranteed
+		str_buf += L","; // will ease the eos comparison
+		new_mrk += L","; // and the exact match is guaranteed
 		
 		if( str_buf.find( new_mrk) == std::string::npos) // if marker not present
 		{

Modified: trunk/GME/MgaUtil/MetaDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/MetaDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MetaDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -71,12 +71,12 @@
 		ASSERT( registrar != NULL );
 
 		if(flags == METADLG_PARREG) {
-				GetDlgItem(IDOK)->SetWindowText("Components...");
+				GetDlgItem(IDOK)->SetWindowText(_T("Components..."));
 		}
 
 		{
 			CRegKey accessTest;
-			if (accessTest.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\GME", KEY_READ | KEY_WRITE) == ERROR_ACCESS_DENIED) {
+			if (accessTest.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\GME"), KEY_READ | KEY_WRITE) == ERROR_ACCESS_DENIED) {
 				GetDlgItem(IDC_RADIOSYS)->EnableWindow(false);
 				GetDlgItem(IDC_RADIOUSER)->EnableWindow(false);
 				GetDlgItem(IDC_RADIOBOTH)->EnableWindow(false);
@@ -86,29 +86,29 @@
 		LV_COLUMN lvc;
 		lvc.mask = LVCF_WIDTH | LVCF_TEXT;
 
-		lvc.pszText = "Paradigm";
+		lvc.pszText = _T("Paradigm");
 		lvc.cx = 100;
 		VERIFYTHROW( m_list.InsertColumn(0, &lvc) != -1 );
 
-		lvc.pszText = "S";
+		lvc.pszText = _T("S");
 		lvc.cx = 20;
 		VERIFYTHROW( m_list.InsertColumn(1, &lvc) != -1 );
 
-		lvc.pszText = "Version";
+		lvc.pszText = _T("Version");
 		lvc.cx = 50;
 		VERIFYTHROW( m_list.InsertColumn(2, &lvc) != -1 );
 
-		lvc.pszText = "Connection string";
+		lvc.pszText = _T("Connection string");
 		lvc.cx = 500;
 		VERIFYTHROW( m_list.InsertColumn(3, &lvc) != -1 );
 
-		lvc.pszText = "GUID";
+		lvc.pszText = _T("GUID");
 		lvc.cx = 300;
 		VERIFYTHROW( m_list.InsertColumn(4, &lvc) != -1 );
 
 		ResetItems();
 	}
-	MSGCATCH("Error while initializing MetaDlg",;)
+	MSGCATCH(_T("Error while initializing MetaDlg"),;)
 		
 	return TRUE;  // return TRUE unless you set the focus to a control
 	              // EXCEPTION: OCX Property Pages should return FALSE
@@ -140,13 +140,13 @@
 		CopyTo(paradigms[i], name);
 		CComVariant v;
 
-		CString mode = "u";
+		CString mode = _T("u");
 		if( registrar->QueryParadigm(paradigms[i], PutOut(cstr), PutOut(v), REGACCESS_USER) != S_OK) {
-			mode = "s";
+			mode = _T("s");
 			if( registrar->QueryParadigm(paradigms[i], PutOut(cstr), PutOut(v), REGACCESS_SYSTEM) != S_OK) {
-				AfxMessageBox("Error reading registry data for paradigm " + name);
-				mode = "?";
-				cstr = "????";
+				AfxMessageBox(_T("Error reading registry data for paradigm ") + name);
+				mode = _T("?");
+				cstr = _T("????");
 			}
 		}
 		if(v.vt != VT_EMPTY) {
@@ -158,7 +158,7 @@
 		
 		HRESULT hr = registrar->VersionFromGUID(paradigms[i], v, PutOut(version), mode ==  'u' ? REGACCESS_USER : REGACCESS_SYSTEM);
 		if (FAILED(hr)) {
-			version = "N/A";
+			version = _T("N/A");
 		}
 
 		int j = m_list.InsertItem(i, name);
@@ -175,12 +175,12 @@
 	}
 }
 
-static char filter[] = 
-	"Paradigm Files (*.xmp)|*.xmp|"
-	"Exported Files (*.xme;*.xml)|*.xme; *.xml|"
-	"MGA Meta Files (*.mta)|*.mta|"
-	"Microsoft Access Files (*.mdb)|*.mdb|"
-	"All Files (*.*)|*.*||";
+static TCHAR filter[] = 
+	_T("Paradigm Files (*.xmp)|*.xmp|")
+	_T("Exported Files (*.xme;*.xml)|*.xme; *.xml|")
+	_T("MGA Meta Files (*.mta)|*.mta|")
+	_T("Microsoft Access Files (*.mdb)|*.mdb|")
+	_T("All Files (*.*)|*.*||");
 
 
 void CMetaDlg::OnAddfile() 
@@ -200,45 +200,45 @@
 		CString ext = dlg.GetFileExt();
 		ext.MakeLower();
 
-		if( ext == "" )
+		if( ext == _T("") )
 		{
 			switch( dlg.m_ofn.nFilterIndex )
 			{
 			case 1:
-				conn = CString("XML=") + dlg.GetPathName() + ".xmp";
+				conn = CString(_T("XML=")) + dlg.GetPathName() + _T(".xmp");
 				break;
 
 			case 2:
-				conn = CString("MGA=") + dlg.GetPathName() + ".mta";
+				conn = CString(_T("MGA=")) + dlg.GetPathName() + _T(".mta");
 				break;
 
 			case 3:
-				conn = CString("DBQ=") + dlg.GetPathName() + ".mdb";
+				conn = CString(_T("DBQ=")) + dlg.GetPathName() + _T(".mdb");
 				break;
 			}
 
 		}
-		else if( ext == "xmp" || ext == "xml" )
-			conn = CString("XML=") + dlg.GetPathName();
-		else if( ext == "mta" )
-			conn = CString("MGA=") + dlg.GetPathName();
-		else if( ext == "mdb" )
-			conn = CString("DBQ=") + dlg.GetPathName();
+		else if( ext == _T("xmp") || ext == _T("xml") )
+			conn = CString(_T("XML=")) + dlg.GetPathName();
+		else if( ext == _T("mta") )
+			conn = CString(_T("MGA=")) + dlg.GetPathName();
+		else if( ext == _T("mdb") )
+			conn = CString(_T("DBQ=")) + dlg.GetPathName();
 		else
 		{
 			switch( dlg.m_ofn.nFilterIndex )
 			{
 			case 1:
 			case 2:
-				conn = CString("XML=") + dlg.GetPathName();
+				conn = CString(_T("XML=")) + dlg.GetPathName();
 				break;
 
 			case 3:
-				conn = CString("MGA=") + dlg.GetPathName();
+				conn = CString(_T("MGA=")) + dlg.GetPathName();
 				break;
 
 			case 4:
-				conn = CString("DBQ=") + dlg.GetPathName();
+				conn = CString(_T("DBQ=")) + dlg.GetPathName();
 				break;
 			}
 		}
@@ -256,7 +256,7 @@
 		to_select = newname;
 		ResetItems();
 	}
-	MSGCATCH("Error while registering paradigm",;)
+	MSGCATCH(_T("Error while registering paradigm"),;)
 }
 
 void CMetaDlg::OnRemove() 
@@ -277,19 +277,19 @@
 			switch(regacc_translate(m_accessmode)) {
 			case REGACCESS_USER: 
 				if(S_OK == registrar->QueryParadigm(PutInBstr(name), &dummyc, &dummyg, REGACCESS_SYSTEM)) {
-					AfxMessageBox("Warning: Paradigm is still present in system registry");
+					AfxMessageBox(_T("Warning: Paradigm is still present in system registry"));
 				}
 				break;
 			case REGACCESS_SYSTEM: 
 				if(S_OK == registrar->QueryParadigm(PutInBstr(name), &dummyc, &dummyg, REGACCESS_USER)) {
-					AfxMessageBox("Warning: Paradigm is still present in user registry");
+					AfxMessageBox(_T("Warning: Paradigm is still present in user registry"));
 				}
 				break;
 			}
 			ResetItems();
 		}
 	}
-	MSGCATCH("Error while removing paradigm",;)
+	MSGCATCH(_T("Error while removing paradigm"),;)
 }
 
 void CMetaDlg::OnAddDB() 
@@ -327,10 +327,10 @@
 		}
 		db.Close();
 	}
-	MSGCATCH("Error while registering paradigm",;)
+	MSGCATCH(_T("Error while registering paradigm"),;)
 	catch(...)
 	{
-		DisplayError("Error while registering paradigm", E_EXCEPTION);
+		DisplayError(_T("Error while registering paradigm"), E_EXCEPTION);
 	}
 }
 
@@ -342,7 +342,7 @@
 		m_remove.EnableWindow(pos != NULL);
 		GetDlgItem(IDOK)->EnableWindow(pos != NULL);
 		m_purge.EnableWindow(pos != NULL);
-		to_select = pos ? m_list.GetItemText(m_list.GetNextSelectedItem(pos),0) : "";
+		to_select = pos ? m_list.GetItemText(m_list.GetNextSelectedItem(pos),0) : _T("");
 		return TRUE;
 	}
 	else if( wParam == IDC_LIST && ((NMHDR*)lParam)->code == NM_DBLCLK )
@@ -364,7 +364,7 @@
 		int i = m_list.GetNextSelectedItem(pos);
 		connstr = m_list.GetItemText(i, 3);
 		if(connstr[0] == '?') {
-			AfxMessageBox("Error with selected paradigm");
+			AfxMessageBox(_T("Error with selected paradigm"));
 			return;
 		}
 		name = m_list.GetItemText(i, 0);

Modified: trunk/GME/MgaUtil/MetaPurgeDialog.cpp
==============================================================================
--- trunk/GME/MgaUtil/MetaPurgeDialog.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MetaPurgeDialog.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -65,26 +65,26 @@
 		LV_COLUMN lvc;
 		lvc.mask = LVCF_WIDTH | LVCF_TEXT;
 
-		lvc.pszText = "S";
+		lvc.pszText = _T("S");
 		lvc.cx = 20;
 		VERIFYTHROW( m_list.InsertColumn(0, &lvc) != -1 );
 
-		lvc.pszText = "Version";
+		lvc.pszText = _T("Version");
 		lvc.cx = 50;
 		VERIFYTHROW( m_list.InsertColumn(1, &lvc) != -1 );
 
-		lvc.pszText = "GUID";
+		lvc.pszText = _T("GUID");
 		lvc.cx = 250;
 		VERIFYTHROW( m_list.InsertColumn(2, &lvc) != -1 );
 
 
-		lvc.pszText = "Connection String";
+		lvc.pszText = _T("Connection String");
 		lvc.cx = 300;
 		VERIFYTHROW( m_list.InsertColumn(3, &lvc) != -1 );
 
 		ResetItems();
 	}
-	MSGCATCH("Error while initializing MetaPurgeDlg",;)
+	MSGCATCH(_T("Error while initializing MetaPurgeDlg"),;)
 		
 	return TRUE;  // return TRUE unless you set the focus to a control
 	              // EXCEPTION: OCX Property Pages should return FALSE
@@ -130,7 +130,7 @@
 
 		CString connstr;
 		CString version;
-		char statc = 'u';
+		TCHAR statc = 'u';
 		HRESULT hr = registrar->QueryParadigm(CComBSTR(paradigm), PutOut(connstr), &vv, REGACCESS_USER);
 		if(hr == E_NOTFOUND) {
 			statc = 's';
@@ -138,16 +138,16 @@
 		} 
 		if(hr != S_OK) {
 			statc = ' ';
-			connstr = "<<error reading this reg.entry>>";
+			connstr = _T("<<error reading this reg.entry>>");
 		}
 
 		hr = registrar->VersionFromGUID(CComBSTR(paradigm), vv, PutOut(version), statc ==  'u' ? REGACCESS_USER : REGACCESS_SYSTEM);
 		if (FAILED(hr)) {
-			version = "N/A";
+			version = _T("N/A");
 		}
 
 		int j;
-		VERIFYTHROW( (j = m_list.InsertItem(i, CString(currentguid == guidnames[i] ? "*" : " ") + statc)) != -1 );
+		VERIFYTHROW( (j = m_list.InsertItem(i, CString(currentguid == guidnames[i] ? _T("*") : _T(" ")) + statc)) != -1 );
 		VERIFYTHROW( m_list.SetItemText(j, 1, version) != 0 );
 		VERIFYTHROW( m_list.SetItemText(j, 2, PutInCString(guidnames[i])) != 0 );
 		VERIFYTHROW( m_list.SetItemText(j, 3, connstr) != 0 );
@@ -174,13 +174,13 @@
 			CopyTo(gg, vv);
 			COMTHROW( registrar->UnregisterParadigmGUID(CComBSTR(paradigm), vv, cur[1] == 's' ? REGACCESS_SYSTEM : REGACCESS_USER) );
 			CString delcstr = m_list.GetItemText(i,3);
-			if(m_delfiles != 0 || delcstr.Find("MGA=") != 0) continue;
+			if(m_delfiles != 0 || delcstr.Find(_T("MGA=")) != 0) continue;
 			DeleteFile(LPCTSTR(delcstr)+4);
 		}
 
 		ResetItems();
 	}
-	MSGCATCH("Error while removing items",;)
+	MSGCATCH(_T("Error while removing items"),;)
 }
 
 void CMetaPurgeDialog::OnSetcurrent() 
@@ -206,7 +206,7 @@
 
 		ResetItems();
 	}
-	MSGCATCH("Error while setting current version",;)
+	MSGCATCH(_T("Error while setting current version"),;)
 }
 
 void CMetaPurgeDialog::OnClose() 

Modified: trunk/GME/MgaUtil/MgaClosure.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaClosure.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MgaClosure.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -25,7 +25,7 @@
 		COMTHROW( rf->get_RegistryValue( CComBSTR( m_projLastClosureNode), PutOut( cst0)));
 		
 		int t_val = -1;
-		if( 1 == _stscanf( (LPCTSTR) cst0, "%i", &t_val))
+		if( 1 == _stscanf( (LPCTSTR) cst0, _T("%i"), &t_val))
 		{
 			*p_pMarkWith = t_val;
 		}
@@ -48,7 +48,7 @@
 		COMTHROW( p_project->get_RootFolder( PutOut( rf)));
 
 		CString cst;
-		cst.Format( "%i", p_iMarkWith);
+		cst.Format( _T("%i"), p_iMarkWith);
 
 		COMTHROW( rf->put_RegistryValue( CComBSTR( m_projLastClosureNode), CComBSTR( cst)));
 	}

Modified: trunk/GME/MgaUtil/MgaEventLogger.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaEventLogger.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MgaEventLogger.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -26,15 +26,15 @@
 		if(newLine)
 		{
 			CTime time = CTime::GetCurrentTime();
-			CString CurrentTime = time.Format("%b %d, %H:%M:%S ");
-			fprintf(EventLog,CurrentTime);
+			CString CurrentTime = time.Format(_T("%b %d, %H:%M:%S "));
+			_ftprintf(EventLog,CurrentTime);
 			newLine = false;
 		}
-		if(s.Find("\r\n")!=-1)
+		if(s.Find(_T("\r\n"))!=-1)
 		{
 			newLine = true;
 		}
-		fprintf(EventLog,s);
+		_ftprintf(EventLog, _T("%s"), s);
 		fflush(EventLog);
 	}
 	return S_OK;
@@ -45,20 +45,20 @@
 	if(!initialized) //if already initialized, don't do anything
 	{
 		CString path;
-		char gmepath[200];
+		TCHAR gmepath[200];
 		if(SHGetSpecialFolderPath( NULL, gmepath, CSIDL_APPDATA, true)) //most likely C:\Documents and Settings\<username>\Application Data
 		{
-			path = CString(gmepath) + "\\GME"; // add \GME to the path
-			_mkdir(path.GetBuffer(4)); //in case GME dir not there, make it, if this function fails because GME already exists, don't care
+			path = CString(gmepath) + _T("\\GME"); // add \GME to the path
+			_tmkdir(path.GetBuffer(4)); //in case GME dir not there, make it, if this function fails because GME already exists, don't care
 			CTime time = CTime::GetCurrentTime(); //to make unique logfile names
-			CString CurrentTime = time.Format( "\\GME_%b-%d_%H.%M.%S.log" );
-			EventLog = fopen(path+CurrentTime,"w");
+			CString CurrentTime = time.Format( _T("\\GME_%b-%d_%H.%M.%S.log") );
+			EventLog = _tfopen(path+CurrentTime,_T("w"));
 
 			if (EventLog != NULL) //fopen succeded
 			{	
 				initialized = true;
 				newLine = true;
-				CComBSTR b = "CMgaEventLogger::StartLogging\r\n";
+				CComBSTR b = L"CMgaEventLogger::StartLogging\r\n";
 				LogEvent(b);
 			}
 		}
@@ -70,7 +70,7 @@
 {
 	if(initialized)
 	{
-		CComBSTR b = "CMgaEventLogger::StopLogging\r\n";
+		CComBSTR b = L"CMgaEventLogger::StopLogging\r\n";
 		LogEvent(b);
 		fflush(EventLog);
 		fclose(EventLog);
@@ -82,7 +82,7 @@
 
 STDMETHODIMP CMgaEventLogger::EmergencyEvent()
 {
-	CComBSTR b = "CMgaEventLogger::EmergencyEvent\r\n";
+	CComBSTR b = L"CMgaEventLogger::EmergencyEvent\r\n";
 	LogEvent(b);
 	StopLogging();
 	return S_OK;

Modified: trunk/GME/MgaUtil/MgaLauncher.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaLauncher.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MgaLauncher.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -10,6 +10,9 @@
 #include "AnnotationBrowserDlg.h"
 #include "CommonComponent.h"
 
+#include <comutil.h>
+#include <comdef.h>
+
 #include "CrashRpt.h"
 #ifdef _DEBUG
 #pragma comment(lib, "CrashRptd.lib")
@@ -47,7 +50,7 @@
 {
 	COMTRY
 	{
-		CopyTo(p, paradigmname);
+		paradigmname = p;
 	}
 	COMCATCH(;)
 }
@@ -74,7 +77,7 @@
 
 	COMTRY
 	{
-		CopyTo(paradigmname, p);
+            CopyTo(paradigmname, p);
 	}
 	COMCATCH(;)
 }
@@ -295,7 +298,7 @@
 //						kind.SetWindowText(txt);
 						metaref_type mid = 0;
 						COMTHROW(metaFco->get_MetaRef(&mid));
-						metaid.Format("%ld",(long)mid);
+						metaid.Format(_T("%ld"),(long)mid);
 					}
 
 
@@ -303,7 +306,7 @@
 
 						bool first = true;
 
-						aspect = "-";
+						aspect = _T("-");
 						CComPtr<IMgaParts> parts;
 						COMTHROW(fco->get_Parts(&parts));
 
@@ -311,7 +314,7 @@
 
 						if(parts != NULL) {
 
-							aspect = "";
+							aspect = _T("");
 
 							MGACOLL_ITERATE(IMgaPart,parts) {
 
@@ -324,7 +327,7 @@
 								COMTHROW( impart_ix->get_MetaAspect(&asp) );
 								COMTHROW( asp->get_Name(&aspname) );
 
-								if (!first) { aspect += "; "; } 
+								if (!first) { aspect += _T("; "); } 
 								else { first = false; }
 
 								aspect += CString(aspname);
@@ -340,7 +343,7 @@
 
 								if (vb_pri_asp != VARIANT_FALSE) {
 
-									aspect += " (primary)";
+									aspect += _T(" (primary)");
 								}
 							}
 							MGACOLL_ITERATE_END;
@@ -369,11 +372,11 @@
 
 							COMTHROW( fco->put_Name( CComBSTR(ccpd.name)) );
 						}
-						long rl = strtol(ccpd.m_relid,NULL,0);
+						long rl = _tcstol(ccpd.m_relid,NULL,0);
 						if(rl != relid) {
-							if(rl <= 0) AfxMessageBox("Invalid RelID value, ignored");
-							else if(IDOK ==AfxMessageBox("Setting Relative ID-s" 
-													" is a dangerous operation.\nProceed?",
+							if(rl <= 0) AfxMessageBox(_T("Invalid RelID value, ignored"));
+							else if(IDOK ==AfxMessageBox(_T("Setting Relative ID-s") 
+													_T(" is a dangerous operation.\nProceed?"),
 													MB_OKCANCEL)) {
 
 								COMTHROW( fco->put_RelID( rl) );
@@ -384,10 +387,10 @@
 
 				} else {
 
-					AfxMessageBox("Non-simple connections currently unsupported object type for Properties.");
+					AfxMessageBox(_T("Non-simple connections currently unsupported object type for Properties."));
 				}
 
-//				AfxMessageBox("Connections currently unsupported object type for Properties.");
+//				AfxMessageBox(_T("Connections currently unsupported object type for Properties."));
 
 			} else {
 
@@ -401,11 +404,11 @@
 
 						COMTHROW( fco->put_Name( CComBSTR(cpd.name)) );
 					}
-					long rl = strtol(cpd.m_relid,NULL,0);
+					long rl = _tcstol(cpd.m_relid,NULL,0);
 					if(rl != cpd.relid) {
-						if(rl <= 0) AfxMessageBox("Invalid RelID value, ignored");
-						else if(IDOK ==AfxMessageBox("Setting Relative ID-s" 
-												" is a dangerous operation.\nProceed?",
+						if(rl <= 0) AfxMessageBox(_T("Invalid RelID value, ignored"));
+						else if(IDOK ==AfxMessageBox(_T("Setting Relative ID-s") 
+												_T(" is a dangerous operation.\nProceed?"),
 												MB_OKCANCEL)) {
 								COMTHROW( fco->put_RelID( rl) );
 							}
@@ -426,11 +429,11 @@
 
 						COMTHROW( folder->put_Name( CComBSTR(cpd.name)) );
 					}
-					long rl = strtol(cpd.m_relid,NULL,0);
+					long rl = _tcstol(cpd.m_relid,NULL,0);
 					if(rl != cpd.relid) {
-						if(rl <= 0) AfxMessageBox("Invalid RelID value, ignored");
-						else if(IDOK ==AfxMessageBox("Setting Relative ID-s" 
-												" is a dangerous operation.\nProceed?",
+						if(rl <= 0) AfxMessageBox(_T("Invalid RelID value, ignored"));
+						else if(IDOK ==AfxMessageBox(_T("Setting Relative ID-s") 
+												_T(" is a dangerous operation.\nProceed?"),
 												MB_OKCANCEL)) {
 								COMTHROW( folder->put_RelID( rl) );
 							}
@@ -440,11 +443,11 @@
 		}
 		else {
 
-			AfxMessageBox("Unsupported object type for Properties.");
+			AfxMessageBox(_T("Unsupported object type for Properties."));
 
 		}
 
-//		AfxMessageBox("dummy PropDlg() implementation");
+//		AfxMessageBox(_T("dummy PropDlg() implementation"));
 
 	}
 	COMCATCH(;)
@@ -458,7 +461,7 @@
 	{
 
 #ifdef _DEBUG
-		AfxMessageBox("dummy AttrDlg() implementation-- only in Debug version");
+		AfxMessageBox(_T("dummy AttrDlg() implementation-- only in Debug version"));
 #endif
 
 	}
@@ -508,7 +511,7 @@
                 if( pos == NULL)
 				{
 					// No quotes found
-                    pos = strstr( key, _T("%1")); // Check for % 1, without quotes
+                    pos = _tcsstr( key, _T("%1")); // Check for % 1, without quotes
                     if( pos == NULL)    // No  parameter at all...
                         pos = key+lstrlen( key)-1;
                     else
@@ -521,7 +524,8 @@
                 lstrcat(pos, _T(" "));
                 lstrcat(pos, url);
   
-				hResult = (HINSTANCE)WinExec( key,showcmd);
+				// FIXME: should use CreateProcess
+				hResult = (HINSTANCE)WinExec( CStringA(key),showcmd);
 			}
 		}
 	}
@@ -548,7 +552,7 @@
 			}
 
 			CComBSTR bstrVal;
-			CComBSTR bstr = "help";
+			CComBSTR bstr = L"help";
 			COMTHROW((imf != NULL) ? 
 				imf->get_RegistryValue(bstr,&bstrVal)
 				:
@@ -607,19 +611,19 @@
 
 			if (!url.IsEmpty())
 			{
-				CString gmeRoot("../");
+				CString gmeRoot(_T("../"));
 				// Use an absolute path based on the GME_ROOT environment variable, instead of a relative path if we can
-				char* gme_root_env = NULL;
-				gme_root_env = getenv("GME_ROOT");
+				TCHAR* gme_root_env = NULL;
+				gme_root_env = _tgetenv(_T("GME_ROOT"));
 				if (gme_root_env) {
-					long len = strlen(gme_root_env);
+					long len = _tcslen(gme_root_env);
 					bool hasSlashAtTheEnd = (gme_root_env[len - 1] == '\\' || gme_root_env[len - 1] == '/');
 					gmeRoot = gme_root_env;
 					if (!hasSlashAtTheEnd)
 						gmeRoot = gmeRoot + "/";
 				}
-				gmeRoot.Replace("\\", "/");
-				CString fullUrl = CString("ms-its:") + gmeRoot + GME_UMAN_HOME + url;
+				gmeRoot.Replace(_T("\\"), _T("/"));
+				CString fullUrl = CString(_T("ms-its:")) + gmeRoot + GME_UMAN_HOME + url;
 				CWnd* mainWnd = AfxGetMainWnd();
 				HWND hwndCaller = NULL;
 				if (mainWnd != NULL)
@@ -627,15 +631,15 @@
 				HWND helpWnd = NULL;
 				helpWnd = ::HtmlHelp(hwndCaller, fullUrl, HH_DISPLAY_TOPIC, 0);
 				if (helpWnd == NULL && url != GME_UMAN_CONTENTS) {
-					fullUrl = CString("ms-its:") + gmeRoot + GME_UMAN_HOME + GME_UMAN_CONTENTS;
+					fullUrl = CString(_T("ms-its:")) + gmeRoot + GME_UMAN_HOME + GME_UMAN_CONTENTS;
 					helpWnd = ::HtmlHelp(hwndCaller, fullUrl, HH_DISPLAY_TOPIC, 0);
 				}
 				if (helpWnd == NULL)
-					AfxMessageBox("Couldn't find help file or help topic: " + fullUrl, MB_OK | MB_ICONSTOP);
+					AfxMessageBox(_T("Couldn't find help file or help topic: ") + fullUrl, MB_OK | MB_ICONSTOP);
 			}
 			else
 			{
-				AfxMessageBox("No default help is available for selection!", MB_OK | MB_ICONSTOP);
+				AfxMessageBox(_T("No default help is available for selection!"), MB_OK | MB_ICONSTOP);
 			}
 		}
 	}
@@ -693,8 +697,8 @@
 
 			if( comps.GetSize() == 0 )
 			{
-				if( AfxMessageBox("There are no registered interpreters for this paradigm. "
-					"Do you want to install your interpreter now?", MB_YESNO) != IDYES )
+				if( AfxMessageBox(_T("There are no registered interpreters for this paradigm. ")
+					_T("Do you want to install your interpreter now?"), MB_YESNO) != IDYES )
 					COMRETURN(S_FALSE);
 			}
 		
@@ -703,7 +707,7 @@
 			else
 			{
 				CCompDlg dlg;
-				dlg.onOKoper = "Interpret...";
+				dlg.onOKoper = _T("Interpret...");
 
 				dlg.paradigm = parname;
 				dlg.type = COMPONENTTYPE_INTERPRETER;
@@ -725,43 +729,43 @@
 		CString compname = prgid;
 		if(type & COMPONENTTYPE_SCRIPT) {
 			CComBSTR engine, scriptfile;
-			COMTHROW(registrar->get_ComponentExtraInfo(REGACCESS_PRIORITY, prgid, CComBSTR("ExecEngine"), &engine));
-			COMTHROW(registrar->get_ComponentExtraInfo(REGACCESS_PRIORITY, prgid, CComBSTR("ScriptFile"), &scriptfile));
+			COMTHROW(registrar->get_ComponentExtraInfo(REGACCESS_PRIORITY, prgid, CComBSTR(L"ExecEngine"), &engine));
+			COMTHROW(registrar->get_ComponentExtraInfo(REGACCESS_PRIORITY, prgid, CComBSTR(L"ScriptFile"), &scriptfile));
 			if(!engine || !scriptfile) {
-				AfxMessageBox("Incomplete registration for script component "+ compname);
+				AfxMessageBox(_T("Incomplete registration for script component ")+ compname);
 			}
-			compname += " (" + CString(engine) + ")";
+			compname += _T(" (") + CString(engine) + _T(")");
 			COMTHROW( component.CoCreateInstance(engine) );
 			CComQIPtr<IMgaComponentEx> compex = component;
 			if(!compex) {
-				AfxMessageBox("Exec.engine is only supported with extended component interface");
+				AfxMessageBox(_T("Exec.engine is only supported with extended component interface"));
 				COMRETURN(E_MGA_NOT_SUPPORTED);
 			}
 			if(scriptfile) {
-				COMTHROW(compex->put_ComponentParameter(CComBSTR("script"), CComVariant(scriptfile)));
+				COMTHROW(compex->put_ComponentParameter(CComBSTR(L"script"), CComVariant(scriptfile)));
 			}
 		}
 		else COMTHROW(CreateMgaComponent(component, prgid));  // Before DispatchProxy: COMTHROW(component.CoCreateInstance(prgid));
 
 
 		if(component == NULL) {
-			AfxMessageBox(CString("Could not start component ") + compname);
+			AfxMessageBox(CString(_T("Could not start component ")) + compname);
 		}
 		else {
 			CComQIPtr<IGMEVersionInfo> vi = component;
 			if(!vi) {
-					if(AfxMessageBox(	"This component does not provide interface version information\n"
-										"It is probably incompatible with GME\n"
-										"Do you want to proceed anyway?" , MB_YESNO) !=IDYES) return S_OK;
+					if(AfxMessageBox(	_T("This component does not provide interface version information\n")
+										_T("It is probably incompatible with GME\n")
+										_T("Do you want to proceed anyway?") , MB_YESNO) !=IDYES) return S_OK;
 			}
 			else {
 				GMEInterfaceVersion vv;
 				COMTHROW(vi->get_version(&vv));
 				if(vv != INTERFACE_VERSION) {
 					CString aa;
-					aa.Format("The interface version number of this component (%d.%d) differs from the GME version (%d.%d)\n"
-								"This will probably result in serious malfunctions\n"
-								"Do you want to proceed anyway?", vv/0x10000,vv%0x10000, INTERFACE_VERSION/0x10000, INTERFACE_VERSION%0x10000); 
+					aa.Format(_T("The interface version number of this component (%d.%d) differs from the GME version (%d.%d)\n")
+								_T("This will probably result in serious malfunctions\n")
+								_T("Do you want to proceed anyway?"), vv/0x10000,vv%0x10000, INTERFACE_VERSION/0x10000, INTERFACE_VERSION%0x10000); 
 					if(AfxMessageBox(aa, MB_YESNO) !=IDYES) return S_OK;
 				}
 			}
@@ -773,20 +777,19 @@
 					// Need to catch SEH exceptions (especially for Win7 x64: see GME-318)
 					if (SUCCEEDED(hr) && !InvokeExWithCrashRpt(compex, project, focusobj, selectedobjs, param, hr)) {
 						project->AbortTransaction();
-						AfxMessageBox("An error has occurred in component " + compname + ".\n"
-							"GME may not be in a stable state.\n"
-							"Please save your work and restart GME.");
+						AfxMessageBox(_T("An error has occurred in component ") + compname + _T(".\n")
+							_T("GME may not be in a stable state.\n")
+							_T("Please save your work and restart GME."));
 					} else {
 						if (!SUCCEEDED(hr)) {
-							BSTR desc = NULL;
-							if (supportErrorInfo && GetErrorInfo(&desc)) {
-								CString msg;
-								CopyTo(desc, msg);
+							_bstr_t desc;
+							if (supportErrorInfo && GetErrorInfo(desc.GetAddress())) {
+								CString msg = static_cast<const TCHAR*>(desc);
 								msg = "Interpreter returned error: " + msg;
 								AfxMessageBox(msg, MB_OK | MB_ICONSTOP);
 								SysFreeString(desc);
 							} else {
-								DisplayError("Interpreter returned error", hr);
+								DisplayError(_T("Interpreter returned error"), hr);
 							}
 							project->AbortTransaction();
 						}
@@ -809,14 +812,14 @@
 					}
 					catch(hresult_exception &e)	{
 						project->AbortTransaction();
-						DisplayError("Interpreter returned error", e.hr);
+						DisplayError(_T("Interpreter returned error"), e.hr);
 					}
 					catch(...)
 					{
 						project->AbortTransaction();
-						AfxMessageBox("An error has occurred in component " + compname + ".\n"
-							"GME may not be in a stable state.\n"
-							"Please save your work and restart GME.");
+						AfxMessageBox(_T("An error has occurred in component ") + compname + _T(".\n")
+							_T("GME may not be in a stable state.\n")
+							_T("Please save your work and restart GME."));
 					} 
 				}
 			}
@@ -843,7 +846,7 @@
 					}
 				}
 				catch(hresult_exception &e)	{
-					DisplayError("Interpreter returned error", e.hr);
+					DisplayError(_T("Interpreter returned error"), e.hr);
 				}
 			}				
 		}
@@ -866,21 +869,21 @@
 		if( q < 0 )
 			q = conn.GetLength();
 
-		CString part((const char*)conn + p, q-p);
+		CString part((const TCHAR*)conn + p, q-p);
 
 		int r = part.Find('=');
 		if( r < 0 )
 			r = part.GetLength();
 
-		CString key((const char*)part, r);
+		CString key((const TCHAR*)part, r);
 
-		if( key == "UID" ||
-			key == "PWD" ||
-			key == "USER" ||
-			key == "PASSWORD" )
+		if( key == _T("UID") ||
+			key == _T("PWD") ||
+			key == _T("USER") ||
+			key == _T("PASSWORD") )
 		{
 			if( !ret.IsEmpty() )
-				ret += ";";
+				ret += _T(";");
 
 			ret += part;
 		}
@@ -926,7 +929,7 @@
 			}
 		}
 		else {
-			AfxMessageBox("Unsupported object type for Annotation Browser.");
+			AfxMessageBox(_T("Unsupported object type for Annotation Browser."));
 		}
 	}
 	COMCATCH(;)

Modified: trunk/GME/MgaUtil/MgaProgressDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaProgressDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MgaProgressDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -18,7 +18,7 @@
 {
 	COMTRY
 	{
-		CopyTo(t, title);
+		title = t;
 
 		if( dlg.m_hWnd != NULL )
 			dlg.SetWindowText(title);
@@ -35,7 +35,7 @@
 
 	COMTRY
 	{
-		CopyTo(msg, lines[line]);
+		lines[line] = msg;
 
 		if( dlg.m_hWnd != NULL )
 			dlg.GetDlgItem(nIDs[line])->SetWindowText(lines[line]);

Modified: trunk/GME/MgaUtil/MgaRegistrar.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaRegistrar.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MgaRegistrar.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -28,7 +28,7 @@
 const CString rootreg(_T("SOFTWARE\\GME"));
 
 
-CString QueryValue(CRegKey &key, const char *name)
+CString QueryValue(CRegKey &key, const TCHAR *name)
 {
 	CString buffer;
 	TCHAR *bufp = buffer.GetBuffer(4096);
@@ -74,8 +74,8 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "IconPath");
-				str.TrimRight(" ;,\t");
+				str	= QueryValue(mga, _T("IconPath"));
+				str.TrimRight(_T(" ;,\t"));
 				if(!str.IsEmpty()) REVOKE_SYS2(mode);
 			}
 		}
@@ -84,9 +84,9 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				CString str2 = QueryValue(mga, "IconPath");
-				str2.TrimLeft(" ;,\t");
-				if(!str.IsEmpty() && !str2.IsEmpty()) str += ";";
+				CString str2 = QueryValue(mga, _T("IconPath"));
+				str2.TrimLeft(_T(" ;,\t"));
+				if(!str.IsEmpty() && !str2.IsEmpty()) str += _T(";");
 				str	+= str2;
 			}
 		}
@@ -99,17 +99,16 @@
 {
 	COMTRY
 	{
-		CString str;
-		CopyTo(path, str);
+		CString str = path;
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "IconPath", str ));
+			ERRTHROW( mga.SetStringValue( _T("IconPath"), str ));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "IconPath", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("IconPath"), str));
 		}
 	}
 	COMCATCH(;)
@@ -126,7 +125,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "ShowMultipleView");
+				str	= QueryValue(mga, _T("ShowMultipleView"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -137,10 +136,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "ShowMultipleView");
+				str = QueryValue(mga, _T("ShowMultipleView"));
 			}
 		}
-		*enabled = (str == "1") ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
+		*enabled = (str == _T("1")) ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
 	}
 	COMCATCH(;)
 }
@@ -149,16 +148,16 @@
 {
 	COMTRY
 	{
-		CString str = (enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "ShowMultipleView", str));
+			ERRTHROW( mga.SetStringValue( _T("ShowMultipleView"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "ShowMultipleView", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("ShowMultipleView"), str));
 		}
 	}
 	COMCATCH(;)
@@ -175,7 +174,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "EventLoggingEnabled");
+				str	= QueryValue(mga, _T("EventLoggingEnabled"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -186,10 +185,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "EventLoggingEnabled");
+				str = QueryValue(mga, _T("EventLoggingEnabled"));
 			}
 		}
-		*enabled = (str == "1") ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
+		*enabled = (str == _T("1")) ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
 	}
 	COMCATCH(;)
 }
@@ -198,16 +197,16 @@
 {
 	COMTRY
 	{
-		CString str = (enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "EventLoggingEnabled", str));
+			ERRTHROW( mga.SetStringValue( _T("EventLoggingEnabled"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "EventLoggingEnabled", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("EventLoggingEnabled"), str));
 		}
 	}
 	COMCATCH(;)
@@ -224,7 +223,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "AutosaveEnabled");
+				str	= QueryValue(mga, _T("AutosaveEnabled"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -235,10 +234,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "AutosaveEnabled");
+				str = QueryValue(mga, _T("AutosaveEnabled"));
 			}
 		}
-		*enabled = (str == "1") ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
+		*enabled = (str == _T("1")) ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
 	}
 	COMCATCH(;)
 }
@@ -247,16 +246,16 @@
 {
 	COMTRY
 	{
-		CString str = (enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "AutosaveEnabled", str));
+			ERRTHROW( mga.SetStringValue( _T("AutosaveEnabled"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "AutosaveEnabled", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("AutosaveEnabled"), str));
 		}
 	}
 	COMCATCH(;)
@@ -273,7 +272,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "AutosaveFreq");
+				str	= QueryValue(mga, _T("AutosaveFreq"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -284,10 +283,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "AutosaveFreq");
+				str = QueryValue(mga, _T("AutosaveFreq"));
 			}
 		}
-		if (_stscanf((LPCTSTR)str, "%ld", secs) != 1) {
+		if (_stscanf((LPCTSTR)str, _T("%ld"), secs) != 1) {
 			*secs = 60;	// Default value: 1 minute
 		}
 	}
@@ -299,16 +298,16 @@
 	COMTRY
 	{
 		CString str;
-		str.Format("%ld", secs);
+		str.Format(_T("%ld"), secs);
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "AutosaveFreq", str));
+			ERRTHROW( mga.SetStringValue( _T("AutosaveFreq"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "AutosaveFreq", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("AutosaveFreq"), str));
 		}
 	}
 	COMCATCH(;)
@@ -325,7 +324,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "AutosaveUseDir");
+				str	= QueryValue(mga, _T("AutosaveUseDir"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -336,10 +335,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "AutosaveUseDir");
+				str = QueryValue(mga, _T("AutosaveUseDir"));
 			}
 		}
-		*enabled = (str == "1") ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
+		*enabled = (str == _T("1")) ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
 	}
 	COMCATCH(;)
 }
@@ -348,16 +347,16 @@
 {
 	COMTRY
 	{
-		CString str = (enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "AutosaveUseDir", str));
+			ERRTHROW( mga.SetStringValue( _T("AutosaveUseDir"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "AutosaveUseDir", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("AutosaveUseDir"), str));
 		}
 	}
 	COMCATCH(;)
@@ -376,7 +375,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "AutosaveDir");
+				str	= QueryValue(mga, _T("AutosaveDir"));
 			}
 		}
 		if(mode & (RM_SYSDOREAD)) {
@@ -384,7 +383,7 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "AutosaveDir");
+				str = QueryValue(mga, _T("AutosaveDir"));
 			}
 		}
 		CopyTo(str, dir);
@@ -396,17 +395,16 @@
 {
 	COMTRY
 	{
-		CString str;
-		CopyTo(dir, str);
+		CString str = dir;
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "AutosaveDir", str));
+			ERRTHROW( mga.SetStringValue( _T("AutosaveDir"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "AutosaveDir", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("AutosaveDir"), str));
 		}
 	}
 	COMCATCH(;)
@@ -424,7 +422,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "ExternalEditorEnabled");
+				str	= QueryValue(mga, _T("ExternalEditorEnabled"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -435,10 +433,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "ExternalEditorEnabled");
+				str = QueryValue(mga, _T("ExternalEditorEnabled"));
 			}
 		}
-		*enabled = (str == "1") ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
+		*enabled = (str == _T("1")) ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
 	}
 	COMCATCH(;)
 }
@@ -447,16 +445,16 @@
 {
 	COMTRY
 	{
-		CString str = (enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "ExternalEditorEnabled", str));
+			ERRTHROW( mga.SetStringValue( _T("ExternalEditorEnabled"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "ExternalEditorEnabled", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("ExternalEditorEnabled"), str));
 		}
 	}
 	COMCATCH(;)
@@ -475,7 +473,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "ExternalEditor");
+				str	= QueryValue(mga, _T("ExternalEditor"));
 			}
 		}
 		if(mode & (RM_SYSDOREAD)) {
@@ -483,7 +481,7 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "ExternalEditor");
+				str = QueryValue(mga, _T("ExternalEditor"));
 			}
 		}
 		CopyTo(str, path);
@@ -495,17 +493,16 @@
 {
 	COMTRY
 	{
-		CString str;
-		CopyTo(path, str);
+		CString str = path;
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "ExternalEditor", str));
+			ERRTHROW( mga.SetStringValue( _T("ExternalEditor"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "ExternalEditor", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("ExternalEditor"), str));
 		}
 	}
 	COMCATCH(;)
@@ -523,7 +520,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "UseAutoRouting");
+				str	= QueryValue(mga, _T("UseAutoRouting"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -534,10 +531,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "UseAutoRouting");
+				str = QueryValue(mga, _T("UseAutoRouting"));
 			}
 		}
-		*enabled = (str == "0") ? VARIANT_FALSE : VARIANT_TRUE; // Default value: true
+		*enabled = (str == _T("0")) ? VARIANT_FALSE : VARIANT_TRUE; // Default value: true
 	}
 	COMCATCH(;)
 }
@@ -547,16 +544,16 @@
 {
 	COMTRY
 	{
-		CString str = (enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "UseAutoRouting", str));
+			ERRTHROW( mga.SetStringValue( _T("UseAutoRouting"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "UseAutoRouting", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("UseAutoRouting"), str));
 		}
 	}
 	COMCATCH(;)
@@ -574,7 +571,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "LabelAvoidance");
+				str	= QueryValue(mga, _T("LabelAvoidance"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -585,10 +582,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "LabelAvoidance");
+				str = QueryValue(mga, _T("LabelAvoidance"));
 			}
 		}
-		*enabled = (str == "1") ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
+		*enabled = (str == _T("1")) ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
 	}
 	COMCATCH(;)
 }
@@ -598,16 +595,16 @@
 {
 	COMTRY
 	{
-		CString str = (enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "LabelAvoidance", str));
+			ERRTHROW( mga.SetStringValue( _T("LabelAvoidance"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "LabelAvoidance", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("LabelAvoidance"), str));
 		}
 	}
 	COMCATCH(;)
@@ -625,8 +622,8 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "ScriptEngine");
-				str.TrimRight(" ;,\t");
+				str	= QueryValue(mga, _T("ScriptEngine"));
+				str.TrimRight(_T(" ;,\t"));
 				if(!str.IsEmpty()) REVOKE_SYS2(mode);
 			}
 		}
@@ -635,9 +632,9 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				CString str2 = QueryValue(mga, "ScriptEngine");
-				str2.TrimLeft(" ;,\t");
-				if(!str.IsEmpty() && !str2.IsEmpty()) str += ";";
+				CString str2 = QueryValue(mga, _T("ScriptEngine"));
+				str2.TrimLeft(_T(" ;,\t"));
+				if(!str.IsEmpty() && !str2.IsEmpty()) str += _T(";");
 				str	+= str2;
 			}
 		}
@@ -649,17 +646,16 @@
 STDMETHODIMP CMgaRegistrar::put_ScriptEngine(regaccessmode_enum mode, BSTR path) {
 	COMTRY
 	{
-		CString str;
-		CopyTo(path, str);
+		CString str = path;
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue("ScriptEngine", str) );//z7
+			ERRTHROW( mga.SetStringValue(_T("ScriptEngine"), str) );//z7
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue("ScriptEngine", str) );//z7
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue(_T("ScriptEngine"), str) );//z7
 		}
 	}
 	COMCATCH(;)
@@ -677,7 +673,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "DefaultZoomLevel");
+				str	= QueryValue(mga, _T("DefaultZoomLevel"));
 				if(!str.IsEmpty()) REVOKE_SYS2(p_mode);
 			}
 		}
@@ -686,7 +682,7 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "DefaultZoomLevel");
+				str = QueryValue(mga, _T("DefaultZoomLevel"));
 			}
 		}
 		CopyTo(str, p_zlev);
@@ -699,17 +695,16 @@
 {
 	COMTRY
 	{
-		CString str;
-		CopyTo(p_zlev, str);
+		CString str = p_zlev;
 		if(p_mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "DefaultZoomLevel", str));
+			ERRTHROW( mga.SetStringValue( _T("DefaultZoomLevel"), str));
 		}
 		if(p_mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( "DefaultZoomLevel", str));
+			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("DefaultZoomLevel"), str));
 		}
 	}
 	COMCATCH(;)
@@ -727,7 +722,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "MouseOverNotify");
+				str	= QueryValue(mga, _T("MouseOverNotify"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -738,10 +733,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "MouseOverNotify");
+				str = QueryValue(mga, _T("MouseOverNotify"));
 			}
 		}
-		*enabled = (str == "1") ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
+		*enabled = (str == _T("1")) ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
 	}
 	COMCATCH(;)
 }
@@ -751,16 +746,16 @@
 {
 	COMTRY
 	{
-		CString str = (enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "MouseOverNotify", str));
+			ERRTHROW( mga.SetStringValue( _T("MouseOverNotify"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "MouseOverNotify", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("MouseOverNotify"), str));
 		}
 	}
 	COMCATCH(;)
@@ -778,7 +773,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "RealNmbFmtStr");
+				str	= QueryValue(mga, _T("RealNmbFmtStr"));
 				if(!str.IsEmpty()) REVOKE_SYS2(p_mode);
 			}
 		}
@@ -787,7 +782,7 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "RealNmbFmtStr");
+				str = QueryValue(mga, _T("RealNmbFmtStr"));
 			}
 		}
 		CopyTo(str, p_fmtStr);
@@ -800,17 +795,16 @@
 {
 	COMTRY
 	{
-		CString str;
-		CopyTo(p_fmtStr, str);
+		CString str = p_fmtStr;
 		if(p_mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "RealNmbFmtStr", str));
+			ERRTHROW( mga.SetStringValue( _T("RealNmbFmtStr"), str));
 		}
 		if(p_mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( "RealNmbFmtStr", str));
+			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("RealNmbFmtStr"), str));
 		}
 	}
 	COMCATCH(;)
@@ -827,7 +821,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "TimeStamping");
+				str	= QueryValue(mga, _T("TimeStamping"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(p_mode);
 				}
@@ -838,10 +832,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "TimeStamping");
+				str = QueryValue(mga, _T("TimeStamping"));
 			}
 		}
-		*p_enabled = (str == "1") ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
+		*p_enabled = (str == _T("1")) ? VARIANT_TRUE : VARIANT_FALSE; // Default value: false
 	}
 	COMCATCH(;)
 }
@@ -850,16 +844,16 @@
 {
 	COMTRY
 	{
-		CString str = (p_enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (p_enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(p_mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "TimeStamping", str));
+			ERRTHROW( mga.SetStringValue( _T("TimeStamping"), str));
 		}
 		if(p_mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( "TimeStamping", str));
+			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("TimeStamping"), str));
 		}
 	}
 	COMCATCH(;)
@@ -876,7 +870,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "Navigation");
+				str	= QueryValue(mga, _T("Navigation"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(p_mode);
 				}
@@ -887,10 +881,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "Navigation");
+				str = QueryValue(mga, _T("Navigation"));
 			}
 		}
-		*p_enabled = (str == "0") ? VARIANT_FALSE : VARIANT_TRUE; // Default value: true
+		*p_enabled = (str == _T("0")) ? VARIANT_FALSE : VARIANT_TRUE; // Default value: true
 	}
 	COMCATCH(;)
 }
@@ -899,16 +893,16 @@
 {
 	COMTRY
 	{
-		CString str = (p_enabled == VARIANT_FALSE) ? "0" : "1";
+		CString str = (p_enabled == VARIANT_FALSE) ? _T("0") : _T("1");
 		if(p_mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "Navigation", str));
+			ERRTHROW( mga.SetStringValue( _T("Navigation"), str));
 		}
 		if(p_mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( "Navigation", str));
+			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("Navigation"), str));
 		}
 	}
 	COMCATCH(;)
@@ -926,7 +920,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "UndoQueueSize");
+				str	= QueryValue(mga, _T("UndoQueueSize"));
 				if(!str.IsEmpty()) REVOKE_SYS2(p_mode);
 			}
 		}
@@ -935,7 +929,7 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "UndoQueueSize");
+				str = QueryValue(mga, _T("UndoQueueSize"));
 			}
 		}
 		CopyTo(str, p_qusz);
@@ -948,17 +942,16 @@
 {
 	COMTRY
 	{
-		CString str;
-		CopyTo(p_qusz, str);
+		CString str = p_qusz;
 		if(p_mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "UndoQueueSize", str));
+			ERRTHROW( mga.SetStringValue( _T("UndoQueueSize"), str));
 		}
 		if(p_mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( "UndoQueueSize", str));
+			if(p_mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("UndoQueueSize"), str));
 		}
 	}
 	COMCATCH(;)
@@ -975,7 +968,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "EdgeSmoothMode");
+				str	= QueryValue(mga, _T("EdgeSmoothMode"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -986,10 +979,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "EdgeSmoothMode");
+				str = QueryValue(mga, _T("EdgeSmoothMode"));
 			}
 		}
-		*smoothMode = (edgesmoothmode_enum)(str.IsEmpty() ? 2 : strtol(str, NULL, 10));
+		*smoothMode = (edgesmoothmode_enum)(str.IsEmpty() ? 2 : _tcstol(str, NULL, 10));
 	}
 	COMCATCH(;)
 }
@@ -999,16 +992,16 @@
 	COMTRY
 	{
 		CString str;
-		str.Format("%d", smoothMode);
+		str.Format(_T("%d"), smoothMode);
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "EdgeSmoothMode", str));
+			ERRTHROW( mga.SetStringValue( _T("EdgeSmoothMode"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "EdgeSmoothMode", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("EdgeSmoothMode"), str));
 		}
 	}
 	COMCATCH(;)
@@ -1025,7 +1018,7 @@
 			res = mga.Open(HKEY_CURRENT_USER, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str	= QueryValue(mga, "FontSmoothMode");
+				str	= QueryValue(mga, _T("FontSmoothMode"));
 				if(!str.IsEmpty()) {
 					REVOKE_SYS2(mode);
 				}
@@ -1036,10 +1029,10 @@
 			res = mga.Open(HKEY_LOCAL_MACHINE, rootreg, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				str = QueryValue(mga, "FontSmoothMode");
+				str = QueryValue(mga, _T("FontSmoothMode"));
 			}
 		}
-		*smoothMode = (fontsmoothmode_enum)(str.IsEmpty() ? 4 : strtol(str, NULL, 10));
+		*smoothMode = (fontsmoothmode_enum)(str.IsEmpty() ? 4 : _tcstol(str, NULL, 10));
 	}
 	COMCATCH(;)
 }
@@ -1049,16 +1042,16 @@
 	COMTRY
 	{
 		CString str;
-		str.Format("%d", smoothMode);
+		str.Format(_T("%d"), smoothMode);
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
-			ERRTHROW( mga.SetStringValue( "FontSmoothMode", str));
+			ERRTHROW( mga.SetStringValue( _T("FontSmoothMode"), str));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
-			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( "FontSmoothMode", str));
+			if(mode & RM_SYS) ERRTHROW( mga.SetStringValue( _T("FontSmoothMode"), str));
 		}
 	}
 	COMCATCH(;)
@@ -1073,7 +1066,7 @@
 		CStringArray ret;
 		if(mode & RM_USER) {
 			CRegKey pars;
-			LONG res = pars.Open(HKEY_CURRENT_USER, rootreg+"\\Paradigms", KEY_READ);
+			LONG res = pars.Open(HKEY_CURRENT_USER, rootreg+_T("\\Paradigms"), KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
 				for(int index = 0;; ++index) {
@@ -1093,7 +1086,7 @@
 
 		if(mode & RM_SYSDOREAD) {
 			CRegKey pars;
-			LONG res = pars.Open(HKEY_LOCAL_MACHINE, rootreg+"\\Paradigms", KEY_READ);
+			LONG res = pars.Open(HKEY_LOCAL_MACHINE, rootreg+_T("\\Paradigms"), KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
 				for(int index = 0;; ++index) {
@@ -1151,18 +1144,18 @@
 		CString conn = connstr;
 		CString connrecent;
 		// we have to parse it
-		if( conn.Left(4) == "XML=" )
+		if( conn.Left(4) == _T("XML=") )
 		{
 			CString file = conn.Mid(4);
 
-			conn = "MGA=";
+			conn = _T("MGA=");
 			conn += file;
 
-			if( conn.Right(4).CompareNoCase(".xml") == 0 || 
-				conn.Right(4).CompareNoCase(".xmp") == 0 ) {
+			if( conn.Right(4).CompareNoCase(_T(".xml")) == 0 || 
+				conn.Right(4).CompareNoCase(_T(".xmp")) == 0 ) {
 				conn.Delete(conn.GetLength() - 4, 4);
 			}
-			conn += ".mta";
+			conn += _T(".mta");
 #define FILEPART(x) (((LPCTSTR)x)+4)
 			DWORD info = GetFileAttributes(FILEPART(conn));
 			if(info != 0xFFFFFFFF ) {	// save old version of paradigm under another name
@@ -1179,19 +1172,19 @@
 					CopyTo(prevguid,gg);
 					CComBstrObj guidstr;
 					CopyTo(gg, guidstr);
-					connrecent = conn.Left(conn.GetLength()-4)+"-"+CString(PutInCString(guidstr))+".mta";
+					connrecent = conn.Left(conn.GetLength()-4)+_T("-")+CString(PutInCString(guidstr))+_T(".mta");
 
 					bool sysmove = false, usermove = false;
 					conn1.Empty();
 					if(QueryParadigm(name, PutOut(conn1), &prevguid, REGACCESS_SYSTEM) == S_OK &&
 						conn1 == CComBSTR(conn)) {  // if it was correctly registered in system
 						if(RegisterParadigm(name, PutInBstr(connrecent), prevversion, prevguid, REGACCESS_TEST) != S_OK) {
-							AfxMessageBox("Cannot register this paradigm file\n"
-										  "an existing '.mta' file with the same name\n"
-										  "is registered in the system registry\n"
-										  "which you are not permitted to change.\n"
-										  "You need to change the name or location\n"
-										  "of the new paradigm file");
+							AfxMessageBox(_T("Cannot register this paradigm file\n")
+										  _T("an existing '.mta' file with the same name\n")
+										  _T("is registered in the system registry\n")
+										  _T("which you are not permitted to change.\n")
+										  _T("You need to change the name or location\n")
+										  _T("of the new paradigm file"));
 							return E_INVALID_USAGE;
 						}
 						sysmove = true;;
@@ -1214,10 +1207,10 @@
 					}
 				}
 			  } catch(hresult_exception(&e)) {
-					AfxMessageBox(CString("Failure saving previous version of paradigm\n") + 
+					AfxMessageBox(CString(_T("Failure saving previous version of paradigm\n")) + 
 									e.what() + 
-									(e.hr == E_BINFILE?" [Binary paradigm file (.mta) incompatibility]\nPossible reason: GME version 6 changed the binary format of paradigms.":"") +
-									"\nOld version will be overwritten");
+									(e.hr == E_BINFILE?_T(" [Binary paradigm file (.mta) incompatibility]\nPossible reason: GME version 6 changed the binary format of paradigms."):_T("")) +
+									_T("\nOld version will be overwritten"));
 					connrecent.Empty();
 			  }
 			}
@@ -1326,53 +1319,53 @@
 			ERRTHROW(mga.Create(HKEY_CURRENT_USER, rootreg) );
 
 			CRegKey pars;
-			ERRTHROW( pars.Create(mga, "Paradigms") );
+			ERRTHROW( pars.Create(mga, _T("Paradigms")) );
 
 			CRegKey par;
-			ERRTHROW( par.Create(pars, PutInCString(name)) );
+			ERRTHROW( par.Create(pars, CString(name)) );
 
 
-			ERRTHROW( par.SetStringValue( "CurrentVersion", PutInCString(guid3)));
+			ERRTHROW( par.SetStringValue( _T("CurrentVersion"), PutInCString(guid3)));
 			if (!cver.IsEmpty()) {
 				ERRTHROW( par.SetStringValue( cver, PutInCString(guid3)));
 			}
 			CRegKey parg;
 			ERRTHROW( parg.Create(par, PutInCString(guid3)) );
 
-			ERRTHROW( parg.SetStringValue( "ConnStr", PutInCString(connstr)));
+			ERRTHROW( parg.SetStringValue( _T("ConnStr"), CString(connstr)));
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey mga;
 			ERRTHROW(mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
 
 			CRegKey pars;
-			ERRTHROW( pars.Create(mga, "Paradigms") );
+			ERRTHROW( pars.Create(mga, _T("Paradigms")) );
 
 			CRegKey par;
 
 			if(mode & RM_SYS) {
-				ERRTHROW( par.Create(pars, PutInCString(name)) );
-				CString gg	= QueryValue(par, "GUID");
-				CString gc	= QueryValue(par, "ConnStr");
-				par.DeleteValue("GUID");
-				par.DeleteValue("ConnStr");
+				ERRTHROW( par.Create(pars, CString(name)) );
+				CString gg	= QueryValue(par, _T("GUID"));
+				CString gc	= QueryValue(par, _T("ConnStr"));
+				par.DeleteValue(_T("GUID"));
+				par.DeleteValue(_T("ConnStr"));
 				if(!gc.IsEmpty() && !gg.IsEmpty()) {
 					CRegKey parg2;
 					ERRTHROW( parg2.Create(par, gg) );
-					ERRTHROW( parg2.SetStringValue( "ConnStr", gc) );
+					ERRTHROW( parg2.SetStringValue( _T("ConnStr"), gc) );
 				}
 
-				ERRTHROW( par.SetStringValue( "CurrentVersion", PutInCString(guid3)));
+				ERRTHROW( par.SetStringValue( _T("CurrentVersion"), PutInCString(guid3)));
 				if (!cver.IsEmpty()) {
 					ERRTHROW( par.SetStringValue( cver, PutInCString(guid3)));
 				}
 				CRegKey parg;
 				ERRTHROW( parg.Create(par, PutInCString(guid3)) );
 	
-				ERRTHROW( parg.SetStringValue( "ConnStr", PutInCString(connstr)));
+				ERRTHROW( parg.SetStringValue( _T("ConnStr"), CString(connstr)));
 			}
 			else {
-				LONG res = par.Open(pars, PutInCString(name));
+				LONG res = par.Open(pars, CString(name));
 				if(res != ERROR_SUCCESS && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			}
 		}
@@ -1392,7 +1385,7 @@
 		CStringArray ret;
 		if(mode & RM_USER) {
 			CRegKey par;
-			LONG res = par.Open(HKEY_CURRENT_USER, rootreg+"\\Paradigms\\" + pname, KEY_READ);
+			LONG res = par.Open(HKEY_CURRENT_USER, rootreg+_T("\\Paradigms\\") + pname, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
 				for(int index = 0;; ++index) {
@@ -1412,10 +1405,10 @@
 
 		if(mode & RM_SYSDOREAD) {
 			CRegKey par;
-			LONG res = par.Open(HKEY_LOCAL_MACHINE, rootreg+"\\Paradigms\\" + pname, KEY_READ);
+			LONG res = par.Open(HKEY_LOCAL_MACHINE, rootreg+_T("\\Paradigms\\") + pname, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				CString cur = QueryValue(par, "CurrentVersion");
+				CString cur = QueryValue(par, _T("CurrentVersion"));
 				if(!cur.IsEmpty()) {  // New style: Connection strings are stored under GUID subkeys
 				  for(int index = 0;; ++index) {
 					TCHAR name[1024];
@@ -1432,7 +1425,7 @@
 				  }
 				}
 				else {
-					CString name = QueryValue(par, "GUID");
+					CString name = QueryValue(par, _T("GUID"));
 					int j;
 					for(j = 0; j < retlen; j++) {		// Make sure, name is not present already, if yes system copy is ignored
 						if(!ret[j].CompareNoCase(name)) break;
@@ -1456,7 +1449,7 @@
 
 	COMTRY
 	{
-		CString pname = PutInCString(parname);
+		CString pname = parname;
 
 		CRegKey subk;
 		CString guidact;
@@ -1473,11 +1466,11 @@
 
 		if(mode & RM_USER) {
 			CRegKey par;
-			res = par.Open(HKEY_CURRENT_USER, rootreg + "\\Paradigms\\" + pname, KEY_READ);
+			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, "CurrentVersion");
+					guidact = QueryValue(par, _T("CurrentVersion"));
 					if(guidact.IsEmpty()) res = ERROR_FILE_NOT_FOUND;
 				}
 				else	guidact = inguidstr;
@@ -1489,11 +1482,11 @@
 
 		if(mode & RM_SYSDOREAD) {
 			CRegKey par;
-			res = par.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Paradigms\\" + pname, KEY_READ);
+			res = par.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Paradigms\\") + pname, KEY_READ);
 			if(res == ERROR_SUCCESS) {
-				CString cur = QueryValue(par, "CurrentVersion");
+				CString cur = QueryValue(par, _T("CurrentVersion"));
 				if(cur.IsEmpty()) {
-					guidact = QueryValue(par, "GUID");
+					guidact = QueryValue(par, _T("GUID"));
 					if(inguidstr != NULL && inguidstr != CComBSTR(guidact)) COMTHROW(E_NOTFOUND);
 					subk.Attach(par.Detach());
 				}
@@ -1508,7 +1501,7 @@
 		if(subk == NULL) return(E_NOTFOUND);  // !!!!!!!
 
 
-		CopyTo(QueryValue(subk, "ConnStr"), connstr);
+		CopyTo(QueryValue(subk, _T("ConnStr")), connstr);
 
 		if(inguidstr == NULL) {
 			GUID g;
@@ -1550,7 +1543,7 @@
 
 		if(mode & RM_USER) {
 			CRegKey par;
-			res = par.Open(HKEY_CURRENT_USER, rootreg + "\\Paradigms\\"+name, KEY_READ);
+			res = par.Open(HKEY_CURRENT_USER, rootreg + _T("\\Paradigms\\")+name, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
 				mode = REGACCESS_USER;
@@ -1569,7 +1562,7 @@
 						CString cver(value);
 						if (cver.Compare(PutInCString(guidbstr)) == 0) {
 							CString namestr(name);
-							if (namestr.CompareNoCase("CurrentVersion") != 0) {
+							if (namestr.CompareNoCase(_T("CurrentVersion")) != 0) {
 								found = true;
 								CopyTo(namestr, ver);
 							}
@@ -1580,7 +1573,7 @@
 		}
 		if(mode & (RM_SYSDOREAD)) {
 			CRegKey par;
-			res = par.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Paradigms\\"+name, KEY_READ);
+			res = par.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Paradigms\\")+name, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
 				for(int index = 0;; ++index) {
@@ -1598,7 +1591,7 @@
 						CString cver(value);
 						if (cver.Compare(PutInCString(guidbstr)) == 0) {
 							CString namestr(name);
-							if (namestr.CompareNoCase("CurrentVersion") != 0) {
+							if (namestr.CompareNoCase(_T("CurrentVersion")) != 0) {
 								found = true;
 								CopyTo(namestr, ver);
 							}
@@ -1616,7 +1609,7 @@
 {
 	CHECK_OUT(guid);
 
-	CString verstr = PutInCString(ver);
+	CString verstr = ver;
 	CString gstr;
 
 	COMTRY
@@ -1625,7 +1618,7 @@
 
 		if(mode & RM_USER) {
 			CRegKey par;
-			res = par.Open(HKEY_CURRENT_USER, rootreg + "\\Paradigms\\"+name, KEY_READ);
+			res = par.Open(HKEY_CURRENT_USER, rootreg + _T("\\Paradigms\\")+name, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) { 
 				gstr = QueryValue(par, verstr);
@@ -1636,7 +1629,7 @@
 		}
 		if(mode & (RM_SYSDOREAD)) {
 			CRegKey par;
-			res = par.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Paradigms\\"+name, KEY_READ);
+			res = par.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Paradigms\\")+name, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) { 
 				gstr = QueryValue(par, verstr);
@@ -1666,8 +1659,8 @@
 
 		if(mode & RM_USER) {
 			CRegKey par;
-			ERRTHROW( par.Open(HKEY_CURRENT_USER, rootreg + "\\Paradigms\\"+name) );
-			CString cur = QueryValue(par, "CurrentVersion");
+			ERRTHROW( par.Open(HKEY_CURRENT_USER, rootreg + _T("\\Paradigms\\")+name) );
+			CString cur = QueryValue(par, _T("CurrentVersion"));
 			if(cur.Compare(PutInCString(guidbstr)) == 0) {
 				COMTHROW(E_INVALID_USAGE);
 			}
@@ -1695,8 +1688,8 @@
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey par;
-			ERRTHROW( par.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Paradigms\\"+name) );
-			CString cur = QueryValue(par, "CurrentVersion");
+			ERRTHROW( par.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Paradigms\\")+name) );
+			CString cur = QueryValue(par, _T("CurrentVersion"));
 			if(cur.Compare(PutInCString(guidbstr)) == 0) {
 				COMTHROW(E_INVALID_USAGE);
 			}
@@ -1733,14 +1726,14 @@
 	{
 		if(mode & RM_USER) {
 			CRegKey pars;
-			LONG res = pars.Open(HKEY_CURRENT_USER, rootreg + "\\Paradigms");
-			if(!res) res = pars.RecurseDeleteKey(PutInCString(name));
+			LONG res = pars.Open(HKEY_CURRENT_USER, rootreg + _T("\\Paradigms"));
+			if(!res) res = pars.RecurseDeleteKey(CString(name));
 			if(res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
 			ERRTHROW(res);
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey pars;
-			LONG res = pars.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Paradigms");
+			LONG res = pars.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Paradigms"));
 			if(!res) {
 				if(mode & RM_SYS) res = pars.RecurseDeleteKey(PutInCString(name));
 				if(mode & RM_TEST) res = pars.Open(pars, PutInCString(name));
@@ -1755,7 +1748,7 @@
 // throws hresult_exception
 void GetComponents(HKEY hive, CStringArray& ret) {
 	CRegKey comps;
-	LONG res = comps.Open(hive, rootreg + "\\Components", KEY_READ);
+	LONG res = comps.Open(hive, rootreg + _T("\\Components"), KEY_READ);
 	if (res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND)
 		COMTHROW(HRESULT_FROM_WIN32(res));
 	if (res == ERROR_SUCCESS) {
@@ -1770,7 +1763,7 @@
 			err = comp.Open(comps, name, KEY_READ);
 			DWORD type2;
 			if (err == ERROR_SUCCESS)
-				err = comp.QueryDWORDValue("Type", type2);
+				err = comp.QueryDWORDValue(_T("Type"), type2);
 			if (err != ERROR_SUCCESS)
 				continue;
 			if((type2 & COMPONENTTYPE_SYSREGREF) != 0) { 
@@ -1809,10 +1802,10 @@
 void TokenizeParadigmString(const CString& paradigms, Functor x) {
 	CStringList ret;
 	int curPos = 0;
-	CString token = paradigms.Tokenize(" ;,\n\t", curPos);
-	while (token != "") {
+	CString token = paradigms.Tokenize(_T(" ;,\n\t"), curPos);
+	while (token != _T("")) {
 		x(token);
-		token = paradigms.Tokenize(" ;,\n\t", curPos);
+		token = paradigms.Tokenize(_T(" ;,\n\t"), curPos);
 	}
 }
 
@@ -1832,16 +1825,16 @@
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_CURRENT_USER, rootreg) );
 			CRegKey comps;
-			ERRTHROW( comps.Create(mga, "Components") );
+			ERRTHROW( comps.Create(mga, _T("Components")) );
 			CRegKey comp;
 			ERRTHROW( comp.Create(comps, PutInCString(progid)) );
 
-			ERRTHROW( comp.SetDWORDValue( "Type", (DWORD)type));
+			ERRTHROW( comp.SetDWORDValue( _T("Type"), (DWORD)type));
 
-			ERRTHROW( comp.SetStringValue( "Description", PutInCString(desc)));
+			ERRTHROW( comp.SetStringValue( _T("Description"), PutInCString(desc)));
 			if(paradigms.Length()) {
 				TokenizeParadigmString(PutInCString(paradigms), [&comp](const CString& par) {
-					ERRTHROW(comp.SetStringValue("Paradigm", par));
+					ERRTHROW(comp.SetStringValue(_T("Paradigm"), par));
 				});
 			}
 		}
@@ -1849,16 +1842,16 @@
 			CRegKey mga;
 			ERRTHROW( mga.Create(HKEY_LOCAL_MACHINE, rootreg) );
 			CRegKey comps;
-			ERRTHROW( comps.Create(mga, "Components") );
+			ERRTHROW( comps.Create(mga, _T("Components")) );
 			if(mode & RM_SYS) {
 				CRegKey comp;
 				ERRTHROW( comp.Create(comps, PutInCString(progid)) );
 	
-				ERRTHROW( comp.SetDWORDValue( "Type", (DWORD)type));
+				ERRTHROW( comp.SetDWORDValue( _T("Type"), (DWORD)type));
 
-				ERRTHROW( comp.SetStringValue( "Description", PutInCString(desc)));
+				ERRTHROW( comp.SetStringValue( _T("Description"), PutInCString(desc)));
 				TokenizeParadigmString(PutInCString(paradigms), [&comp](const CString& par) {
-					ERRTHROW(comp.SetStringValue("Paradigm", par));
+					ERRTHROW(comp.SetStringValue(_T("Paradigm"), par));
 				});
 			}
 			else {
@@ -1885,15 +1878,15 @@
 		HKEY hives[] = { HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE };
 		for (int i = 0; i < 2; i++) {
 			CRegKey comp;
-			LONG res = comp.Open(hives[i], rootreg+"\\Components\\"+progidstr, KEY_READ);
+			LONG res = comp.Open(hives[i], rootreg+_T("\\Components\\")+progidstr, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
-				comp.QueryDWORDValue("Type", dwType);
+				comp.QueryDWORDValue(_T("Type"), dwType);
 				ULONG count;
-				res = comp.QueryStringValue("Description", NULL, &count);
-				if (strDesc == "" && res == ERROR_SUCCESS) {
+				res = comp.QueryStringValue(_T("Description"), NULL, &count);
+				if (strDesc == _T("") && res == ERROR_SUCCESS) {
 					CString ret;
-					if (comp.QueryStringValue("Description", ret.GetBufferSetLength(count), &count) == ERROR_SUCCESS)
+					if (comp.QueryStringValue(_T("Description"), ret.GetBufferSetLength(count), &count) == ERROR_SUCCESS)
 						strDesc = ret;
 				}
 			}
@@ -1903,7 +1896,7 @@
 		
 		if (type)
 			*type = (componenttype_enum)dwType;
-		if (desc && strDesc != "")
+		if (desc && strDesc != _T(""))
 			CopyTo(strDesc, desc);
 		return S_OK;
 	}
@@ -1917,13 +1910,13 @@
 //		if(mode & RM_USER) {
 		if(mode & (RM_USER | RM_SYS) ){
 			CRegKey comps;
-			LONG res = comps.Open(HKEY_CURRENT_USER, rootreg + "\\Components");
+			LONG res = comps.Open(HKEY_CURRENT_USER, rootreg + _T("\\Components"));
 
 			DWORD type2 = 0;
 			if(!res) {
 				CRegKey comp;
 				res =  comp.Open(comps, PutInCString(progid), KEY_READ);
-				if(!res) comp.QueryDWORDValue( "Type", type2);
+				if(!res) comp.QueryDWORDValue( _T("Type"), type2);
 			}
 
 			if((mode & RM_USER) || (type2 & COMPONENTTYPE_SYSREGREF) != 0 ) {
@@ -1934,7 +1927,7 @@
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey comps;
-			LONG res = comps.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Components");
+			LONG res = comps.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Components"));
 			if(!res) {
 				if(mode & RM_SYS) res = comps.RecurseDeleteKey(PutInCString(progid));
 				if(mode & RM_TEST) res = comps.Open(comps, PutInCString(progid));
@@ -1955,11 +1948,11 @@
 	{
 		if(mode & RM_USER) {
 			CRegKey comp;
-			LONG res = comp.Open(HKEY_CURRENT_USER, rootreg+"\\Components\\"+progidstr);
+			LONG res = comp.Open(HKEY_CURRENT_USER, rootreg+_T("\\Components\\")+progidstr);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
 				DWORD type2;
-				ERRTHROW( comp.QueryDWORDValue( "Type", type2));
+				ERRTHROW( comp.QueryDWORDValue( _T("Type"), type2));
 
 				if((type2 & COMPONENTTYPE_ALL)) { 
 					if(!newVal) { ERRTHROW( comp.DeleteValue(PutInCString(name)) );  }
@@ -1969,11 +1962,11 @@
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey comp;
-			LONG res = comp.Open(HKEY_LOCAL_MACHINE, rootreg+"\\Components\\"+progidstr);
+			LONG res = comp.Open(HKEY_LOCAL_MACHINE, rootreg+_T("\\Components\\")+progidstr);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
 				DWORD type2;
-				ERRTHROW( comp.QueryDWORDValue( "Type", type2));
+				ERRTHROW( comp.QueryDWORDValue( _T("Type"), type2));
 
 				if((mode & RM_SYS) && (type2 & COMPONENTTYPE_ALL)) { 
 					if(!newVal) { ERRTHROW( comp.DeleteValue(PutInCString(name)) );  }
@@ -1996,7 +1989,7 @@
 		HKEY hives[] = { HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE };
 		for (int i = 0; i < 2; i++) {
 			CRegKey comp;
-			LONG res = comp.Open(hives[i], rootreg+"\\Components\\"+progidstr, KEY_READ);
+			LONG res = comp.Open(hives[i], rootreg+_T("\\Components\\")+progidstr, KEY_READ);
 			if(res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			if(res == ERROR_SUCCESS) {
 				ULONG count;
@@ -2024,34 +2017,34 @@
 		CRegKey comp;
 		CString m_strClassId;
 		for(int i = 0; i < 10; i++) {
-			LONG res = comp.Open(HKEY_CLASSES_ROOT, m_strProgId + "\\CLSID", KEY_READ);
+			LONG res = comp.Open(HKEY_CLASSES_ROOT, m_strProgId + _T("\\CLSID"), KEY_READ);
 			if(res == ERROR_SUCCESS) {
-				m_strClassId = QueryValue(comp,"" );
+				m_strClassId = QueryValue(comp,_T("") );
 				break;
 			}
 			else {
-				res = comp.Open(HKEY_CLASSES_ROOT, m_strProgId + "\\CurVer", KEY_READ);
+				res = comp.Open(HKEY_CLASSES_ROOT, m_strProgId + _T("\\CurVer"), KEY_READ);
 				if(res != ERROR_SUCCESS) COMTHROW(E_NOTFOUND);
-				m_strProgId = QueryValue(comp, "" );
+				m_strProgId = QueryValue(comp, _T("") );
 				comp.Close();
 			}
 		}
 		if(m_strClassId.IsEmpty()) COMTHROW(E_NOTFOUND);
 
-		LONG res = comp.Open(HKEY_CLASSES_ROOT, "CLSID\\" + m_strClassId + "\\InprocServer32", KEY_READ);
+		LONG res = comp.Open(HKEY_CLASSES_ROOT, _T("CLSID\\") + m_strClassId + _T("\\InprocServer32"), KEY_READ);
 		CString m_strPath;
 		if(res == ERROR_SUCCESS) {
-			m_strPath = QueryValue(comp, "" );
-			if (m_strPath == "mscoree.dll") {
-				char data[MAX_PATH];
+			m_strPath = QueryValue(comp, _T("") );
+			if (m_strPath == _T("mscoree.dll")) {
+				TCHAR data[MAX_PATH];
 				ULONG num_bytes = sizeof(data) / sizeof(data[0]);
-				if (comp.QueryValue("CodeBase", 0, data, &num_bytes) == ERROR_SUCCESS) {
+				if (comp.QueryValue(_T("CodeBase"), 0, data, &num_bytes) == ERROR_SUCCESS) {
 					m_strPath = data;
 					m_strPath = m_strPath.Right(m_strPath.GetLength() - 8);
 					m_strPath.Replace('/', '\\');
 				} else {
-					if (comp.QueryValue("Assembly", 0, data, &num_bytes) == ERROR_SUCCESS) {
-						m_strPath = "GAC: ";
+					if (comp.QueryValue(_T("Assembly"), 0, data, &num_bytes) == ERROR_SUCCESS) {
+						m_strPath = _T("GAC: ");
 						m_strPath += data;
 					}
 				}
@@ -2082,7 +2075,7 @@
 Tristate_t IsAssociated_hive(const CString& progidstr, const CString& paradigmstr, HKEY hive) {
 	CRegKey acomp;
 
-	if (acomp.Open(hive, rootreg + "\\Components\\" + progidstr + "\\Associated", KEY_READ) != ERROR_SUCCESS) {
+	if (acomp.Open(hive, rootreg + _T("\\Components\\") + progidstr + _T("\\Associated"), KEY_READ) != ERROR_SUCCESS) {
 		return Tristate_Not_Specified;
 	}
 	ULONG count;
@@ -2093,7 +2086,7 @@
 	CString val;
 	if (acomp.QueryStringValue(paradigmstr, val.GetBufferSetLength(count), &count) == ERROR_SUCCESS) {
 		val.ReleaseBuffer();
-		if (val == "Disabled") {
+		if (val == _T("Disabled")) {
 			return Tristate_Disabled;
 		}
 	}
@@ -2123,8 +2116,7 @@
 	{
 		CStringArray ret;
 
-		CString paradigmstr;
-		CopyTo(paradigm, paradigmstr);
+		CString paradigmstr = paradigm;
 
 		CStringArray components;
 		if (mode & REGACCESS_USER)
@@ -2180,33 +2172,33 @@
 		bool somethingdone = false;
 		if(mode & RM_USER) {		
 			CRegKey comp;
-			LONG res = comp.Open(HKEY_CURRENT_USER, rootreg + "\\Components\\" + pname);
+			LONG res = comp.Open(HKEY_CURRENT_USER, rootreg + _T("\\Components\\") + pname);
 			CRegKey assocs;
 			if(res == ERROR_FILE_NOT_FOUND) {   // try to create a shadow registry
 				CRegKey comp1, mga;
-				res = comp1.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Components\\" + pname, KEY_READ);
+				res = comp1.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Components\\") + pname, KEY_READ);
 				if(!res) res = mga.Create(HKEY_CURRENT_USER, rootreg);
 				CRegKey comps;
-				if(!res) res = ( comps.Create(mga, "Components") );
+				if(!res) res = ( comps.Create(mga, _T("Components")) );
 				if(!res) res = ( comp.Create(comps, pname) );
 			}
-			if(!res) res = assocs.Create(comp, "Associated");
-			if(!res) assocs.SetStringValue( PutInCString(paradigm), "");
+			if(!res) res = assocs.Create(comp, _T("Associated"));
+			if(!res) assocs.SetStringValue( PutInCString(paradigm), _T(""));
 			if(!res) somethingdone = true;
 			if(res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
 			ERRTHROW(res);
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey comp;
-			LONG res = comp.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Components\\" + pname);
+			LONG res = comp.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Components\\") + pname);
 			if(mode & RM_SYS) {
 				CRegKey assocs;
-				if(!res) res = assocs.Create(comp, "Associated");
-				if(!res) res = assocs.SetStringValue( PutInCString(paradigm), "");
+				if(!res) res = assocs.Create(comp, _T("Associated"));
+				if(!res) res = assocs.SetStringValue( PutInCString(paradigm), _T(""));
 			}
 			else {
 				CRegKey assocs;
-				LONG res = assocs.Open(comp, "Associated");
+				LONG res = assocs.Open(comp, _T("Associated"));
 				if(res != ERROR_SUCCESS && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
 			}
 			if(!res) somethingdone = true;
@@ -2224,29 +2216,29 @@
 	{
 		if(mode & RM_USER) {		
 			CRegKey comp;
-			LONG res = comp.Open(HKEY_CURRENT_USER, rootreg + "\\Components\\" + pname);
+			LONG res = comp.Open(HKEY_CURRENT_USER, rootreg + _T("\\Components\\") + pname);
 			if (res == ERROR_FILE_NOT_FOUND) {
 				CRegKey comp1, mga;
-				res = comp1.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Components\\" + pname, KEY_READ);
+				res = comp1.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Components\\") + pname, KEY_READ);
 				if(!res) res = mga.Create(HKEY_CURRENT_USER, rootreg);
 				CRegKey comps;
-				if(!res) res = ( comps.Create(mga, "Components") );
+				if(!res) res = ( comps.Create(mga, _T("Components")) );
 				if(!res) res = ( comp.Create(comps, pname) );
 			}
 			CRegKey assocs;
-			if(!res) res = assocs.Open(comp, "Associated");
+			if(!res) res = assocs.Open(comp, _T("Associated"));
 			if (res == ERROR_FILE_NOT_FOUND) 
-				res = assocs.Create(comp, "Associated");
+				res = assocs.Create(comp, _T("Associated"));
 			if (!res)
-				res = assocs.SetStringValue(PutInCString(paradigm), "Disabled");
+				res = assocs.SetStringValue(PutInCString(paradigm), _T("Disabled"));
 			if(res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
 			ERRTHROW(res);
 		}
 		if(mode & (RM_SYS | RM_TEST)) {
 			CRegKey comp;
-			LONG res = comp.Open(HKEY_LOCAL_MACHINE, rootreg + "\\Components\\" + pname);
+			LONG res = comp.Open(HKEY_LOCAL_MACHINE, rootreg + _T("\\Components\\") + pname);
 			CRegKey assocs;
-			if(!res) res = assocs.Open(comp, "Associated");
+			if(!res) res = assocs.Open(comp, _T("Associated"));
 			if(mode & RM_SYS) {
 				if(!res) res = assocs.DeleteValue(PutInCString(paradigm));
 			}
@@ -2275,13 +2267,13 @@
 		if (can_ass) *can_ass = VARIANT_FALSE;
 		VARIANT_BOOL can = VARIANT_FALSE;
 		CComBSTR pars;
-		get_ComponentExtraInfo(mode,progid,CComBSTR("Paradigm"), &pars);
+		get_ComponentExtraInfo(mode,progid,CComBSTR(L"Paradigm"), &pars);
 		if(!pars && !(type & COMPONENTTYPE_SCRIPT)) {
 			CComPtr<IMgaComponent> comp;
 			CreateMgaComponent(comp, progid);
 			if(!comp) COMTHROW(E_NOTFOUND);
 			COMTHROW(comp->get_Paradigm(&pars));
-			put_ComponentExtraInfo(REGACCESS_BOTH, progid, CComBSTR("Paradigm"), pars);  // just try
+			put_ComponentExtraInfo(REGACCESS_BOTH, progid, CComBSTR(L"Paradigm"), pars);  // just try
 		}
 		if(!pars) {
 			can = type & COMPONENTTYPE_PARADIGM_INDEPENDENT ? VARIANT_TRUE : VARIANT_FALSE;
@@ -2316,7 +2308,7 @@
 		}
 
 		CTLREGPROC DLLRegisterServer =
-			(CTLREGPROC)::GetProcAddress(hModule,"DllRegisterServer" );
+			(CTLREGPROC)::GetProcAddress(hModule, "DllRegisterServer");
 		
 		if( DLLRegisterServer == NULL )
 		{
@@ -2382,7 +2374,7 @@
 								CLSID tempGUID;
 								HRESULT hr = CLSIDFromProgID(olestr, &tempGUID);
 								if(hr == S_OK && tempGUID == typeattr->guid) {
-									progid = olestr;
+									progid = CComBstrObj(olestr);
 								}
 							}
 						}

Modified: trunk/GME/MgaUtil/MgaResolver.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaResolver.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MgaResolver.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -313,9 +313,9 @@
 			COMTHROW( parent_mfolder->get_Name(&parmfolder_name) );
 
 			CString sz_format;
-			sz_format.Format(	"Paradigm violation!  Parent folder %S of type %S\n"
-								"cannot contain a child folder\n"
-								"of type %S",
+			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
 			);
@@ -370,7 +370,7 @@
 
 		CString sentence;
 		if(CComBSTR(kind).Length()) {
-			sentence = "Specified metaobject '" + CString(kind) + "'";
+			sentence = _T("Specified metaobject '") + CString(kind) + _T("'");
 			COMTHROW( 
 				((hr = parent_mf->get_LegalRootObjectByName(kind, &mfco)) == E_NOTFOUND) ?
 				S_OK : hr
@@ -428,7 +428,7 @@
 				// match on name object occurs, but incompatible user spec'd objtype
 
 
-				sentence += " is of invalid object type. ";
+				sentence += _T(" is of invalid object type. ");
 			}
 
 			// either a fail on name match && proper objtype,
@@ -438,7 +438,7 @@
 
 			else {
 
-				sentence += " is not found. ";
+				sentence += _T(" is not found. ");
 
 			}
 		}
@@ -471,9 +471,9 @@
 
 				CString sz_format;
 
-				sz_format.Format(	"%sParent folder %S\n"
-									"of type %S\n"
-									"cannot have any children.",
+				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
@@ -495,7 +495,7 @@
 		}
 
 		
-		CDialogList cdl(sentence + "Resolve Object Kind of ObjType "+helper_ObjTypeStr(objtype),
+		CDialogList cdl(sentence + _T("Resolve Object Kind of ObjType ")+helper_ObjTypeStr(objtype),
 			CDialogList::CHKTEXT_ONETIMER);
 		CComPtr<IMgaMetaFCO> fco_ix;
 		CList<int,int> valid_obj_map;
@@ -534,16 +534,16 @@
 				CString sz_format;
 				CString sz_format_tmp;
 
-				sz_format_tmp.Format(	"Paradigm Violation!  Parent folder %S\n"
-										"of type %S\n"
-										"cannot have any children\n",
+				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(	"of object type %s\n",
+					sz_format_tmp.Format(	_T("of object type %s\n"),
 											helper_ObjTypeStr(objtype)
 											);
 					sz_format += sz_format_tmp;
@@ -579,7 +579,7 @@
 			if(this->mb_is_interactive && sentence.GetLength()) {
 				CComBSTR newname;
 				COMTHROW(fco_ix->get_Name(&newname));
-				sentence += "\nUsing the only valid choice '" + CString(newname) + "' instead.";
+				sentence += _T("\nUsing the only valid choice '") + CString(newname) + _T("' instead.");
 
 				CComPtr<IMgaProject> mgaProject;
 				COMTHROW(parent->get_Project(&mgaProject));
@@ -608,7 +608,7 @@
 
 		if ((cdl.DoModal() != IDOK) || (cdl.mn_selection_index == LB_ERR)) {
 //			#pragma bookmark (note: insert helpful message box here get_KindByStr[1] )
-//			AfxMessageBox("no items chosen from dialog");
+//			AfxMessageBox(_T("no items chosen from dialog"));
 			return RESOLV_ERR_get_KindByStr;
 		}
 
@@ -747,7 +747,7 @@
 				CopyTo(role2, c3);
 			}
 
-			if ((c2 == "") || (c2 == c1) || (c3 != "" && c1 == c3)) {
+			if ((c2 == _T("")) || (c2 == c1) || (c3 != _T("") && c1 == c3)) {
 
 				COMTHROW(targ_fco->get_ObjType(&targ_objtype));
 
@@ -782,7 +782,7 @@
 								CString cb1((BSTR) name);
 								CString cb2(aspect);
 
-								if ((cb2 == "") || (cb2 == cb1 )) {
+								if ((cb2 == _T("")) || (cb2 == cb1 )) {
 
 									// finally-- success!
 
@@ -885,7 +885,7 @@
 					COMTHROW( targ_roles->get_Item(1, &targ_role) );
 					ASSERT(targ_role != NULL);
 
-					if (CString(aspect) == "") { // done
+					if (CString(aspect) == _T("")) { // done
 
 						COMTHROW( targ_role.CopyTo(p) );
 
@@ -951,7 +951,7 @@
 				} // eo if (count == 1)
 
 				CList<int, int> valid_role_map;
-				CDialogList cdl("Resolve Role Type", CDialogList::CHKTEXT_ONETIMER);
+				CDialogList cdl(_T("Resolve Role Type"), CDialogList::CHKTEXT_ONETIMER);
 
 				for (int z = 1; z <= role_count; z++) {
 
@@ -959,7 +959,7 @@
 					COMTHROW( targ_roles->get_Item(z, &targ_role) );
 					ASSERT(targ_role != NULL);
 
-					if (CString(aspect) == "") { // done
+					if (CString(aspect) == _T("")) { // done
 
 						CComBSTR role_name;
 
@@ -1071,29 +1071,29 @@
 			CString sz_format;
 			CString sz_format_tmp;
 
-			sz_format_tmp.Format(	"Paradigm Violation!  Cannot create within parent Model %S\n"
-									"of type %S an object\n",
+			sz_format_tmp.Format(	_T("Paradigm Violation!  Cannot create within parent Model %s\n")
+									_T("of type %s an object\n"),
 									(BSTR) parent_name,
 									(BSTR) mparent_name);
 			sz_format+=sz_format_tmp;
 
-			if (CString(kind) != "") {
+			if (CString(kind) != _T("")) {
 
-				sz_format_tmp.Format("with kind %S\n",
+				sz_format_tmp.Format(_T("with kind %s\n"),
 								kind);
 				sz_format+=sz_format_tmp;
 			}
 
 			if (objtype != OBJTYPE_NULL) {
 
-				sz_format_tmp.Format("of type %s\n",
+				sz_format_tmp.Format(_T("of type %s\n"),
 								helper_ObjTypeStr(objtype));
 				sz_format+=sz_format_tmp;
 			}
 
-			if (CString(aspect) != "") {
+			if (CString(aspect) != _T("")) {
 
-				sz_format_tmp.Format("in aspect %S",
+				sz_format_tmp.Format(_T("in aspect %s"),
 								aspect);
 				sz_format+=sz_format_tmp;
 			}
@@ -1191,7 +1191,7 @@
 
 				CComPtr<IMgaMetaAttribute> imma_ix;
 				CString sz_dialog_name;
-				sz_dialog_name.Format("Resolve Attribute Kind (for %S):",kind);
+				sz_dialog_name.Format(_T("Resolve Attribute Kind (for %s):"),kind);
 				CDialogList cdl( sz_dialog_name, CDialogList::CHKTEXT_ONETIMER, true );
 
 				MGACOLL_ITERATE(IMgaMetaAttribute, mattrs) {
@@ -1249,9 +1249,9 @@
 			COMTHROW( parent_metafco->get_Name(&meta_name) );
   
 			
-			sz_format.Format(	"No such attribute %S\n"
-								"can be found in %s %S\n"
-								"of kind %S",
+			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,
@@ -1355,24 +1355,24 @@
 		COMTHROW( src->get_MetaRole(& meta_src_role) );
 		COMTHROW( dst->get_MetaRole(& meta_dst_role) );
 
-		CString path = "src ";
+		CString path = _T("src ");
 		CString tmp;
 		metaref_type mr;
 		COMTHROW( meta_src_role->get_MetaRef(&mr) );
-		tmp.Format("%d ",mr);
+		tmp.Format(_T("%d "),mr);
 		path += tmp;
 		if(src_port!=NULL) {
 			COMTHROW( src_port->get_MetaRole( & meta_src_port_role ) );
 			ASSERT(meta_src_port_role!=NULL);
 
 			COMTHROW( meta_src_port_role->get_MetaRef(&mr) );
-			tmp.Format("%d ",mr);
+			tmp.Format(_T("%d "),mr);
 			path += tmp;
 		}
-		path += ", dst ";
+		path += _T(", dst ");
 
 		COMTHROW( meta_dst_role->get_MetaRef(&mr) );
-		tmp.Format("%d ",mr);
+		tmp.Format(_T("%d "),mr);
 		path += tmp;
 
 		if(dst_port != NULL) {
@@ -1380,7 +1380,7 @@
 			ASSERT(meta_dst_port_role!=NULL);
 
 			COMTHROW( meta_dst_port_role->get_MetaRef(&mr) );
-			tmp.Format("%d ",mr);
+			tmp.Format(_T("%d "),mr);
 			path += tmp;
 		}
 
@@ -1400,7 +1400,7 @@
 
 		// now get valid roles for input aspect (if any)
 
-		CDialogList cdl("Select Connection Role Type", CDialogList::CHKTEXT_STICKY);
+		CDialogList cdl(_T("Select Connection Role Type"), CDialogList::CHKTEXT_STICKY);
 		CList<int, int> valid_role_map;
 		CComPtr<IMgaMetaRole> immr_ix;
 
@@ -1569,8 +1569,8 @@
 			COMTHROW( meta_dst_role->get_Name(&name) );
 			CString sz_dst_role_name(name);
 
-			CString sz_src_port("<no port>");
-			CString sz_src_port_role("<no role>");
+			CString sz_src_port(_T("<no port>"));
+			CString sz_src_port_role(_T("<no role>"));
 			if (src_port != NULL) {
 				name.Empty();
 				COMTHROW( src_port->get_Name(&name) );
@@ -1581,8 +1581,8 @@
 				sz_src_port_role = CString(name);
 			}
 
-			CString sz_dst_port("<no port>");
-			CString sz_dst_port_role("<no role>");
+			CString sz_dst_port(_T("<no port>"));
+			CString sz_dst_port_role(_T("<no role>"));
 			if (dst_port != NULL) {
 				name.Empty();
 				COMTHROW( dst_port->get_Name(&name) );
@@ -1597,8 +1597,8 @@
 			CString sz_format_tmp;
 
 			sz_format_tmp.Format(
-				"Paradigm violation!  Cannot make connection for \n"
-				"source: %s (%s)",
+				_T("Paradigm violation!  Cannot make connection for \n")
+				_T("source: %s (%s)"),
 				sz_src_name, sz_src_role_name
 			);
 
@@ -1608,16 +1608,16 @@
 			if (src_port != NULL) {
 
 				sz_format_tmp.Format(
-					" through port: %s (%s)",
+					_T(" through port: %s (%s)"),
 					sz_src_port, sz_src_port_role				
 				);
 
 				sz_format += sz_format_tmp;
 			}
-			sz_format += CString("\nto\n");
+			sz_format += CString(_T("\nto\n"));
 				
 			sz_format_tmp.Format(
-				"destination: %s (%s)",
+				_T("destination: %s (%s)"),
 				sz_dst_name, sz_dst_role_name
 			);
 			sz_format += sz_format_tmp;
@@ -1625,24 +1625,24 @@
 			if (dst_port != NULL) {
 
 				sz_format_tmp.Format(
-					" through port: %s (%s)",
+					_T(" through port: %s (%s)"),
 					sz_dst_port, sz_dst_port_role				
 				);
 
 				sz_format += sz_format_tmp;
 			}
 
-			sz_format += CString("\n");
+			sz_format += CString(_T("\n"));
 
-			if (sz_aspect_name != "") {
+			if (sz_aspect_name != _T("")) {
 
-				sz_format_tmp.Format("in aspect %s \n",
+				sz_format_tmp.Format(_T("in aspect %s \n"),
 					sz_aspect_name);
 				sz_format += sz_format_tmp;
 
 			}
 
-			sz_format_tmp.Format(				"within parent: %s (%s)",
+			sz_format_tmp.Format(				_T("within parent: %s (%s)"),
 				sz_parent_name, sz_parent_role
 			);
 			sz_format += sz_format_tmp;
@@ -1696,7 +1696,7 @@
 
 		// copy roles into the dialog
 
-		CDialogList cdl("Select Reference Role Type", CDialogList::CHKTEXT_ONETIMER);
+		CDialogList cdl(_T("Select Reference Role Type"), CDialogList::CHKTEXT_ONETIMER);
 		CList<int, int> valid_role_map;
 		CComPtr<IMgaMetaRole> immr_ix;
 
@@ -1875,16 +1875,16 @@
 			CString sz_format_tmp;
 
 			sz_format_tmp.Format(
-				"Cannot insert reference for \n"
-				"source: %s (%s) \n",
+				_T("Cannot insert reference for \n")
+				_T("source: %s (%s) \n"),
 				sz_src_name, sz_src_role_name
 				);
 			sz_format += sz_format_tmp;
 
-			if (sz_aspect_name != "") {
+			if (sz_aspect_name != _T("")) {
 
 				sz_format_tmp.Format(
-					"in aspect %s \n",
+					_T("in aspect %s \n"),
 					sz_aspect_name
 					);
 				sz_format += sz_format_tmp;
@@ -1893,7 +1893,7 @@
 			}
 
 			sz_format_tmp.Format(
-				"within parent: %s (%s)",
+				_T("within parent: %s (%s)"),
 				sz_parent_name, sz_parent_role
 			);
 			sz_format += sz_format_tmp;
@@ -2327,7 +2327,7 @@
 {
 	CComPtr<IGMEOLEApp> gme;
 	if (mb_is_interactive && (project != NULL)) {		
-		CComBSTR bstrName("GME.Application");
+		CComBSTR bstrName(L"GME.Application");
 		CComPtr<IMgaClient> pClient;
 		HRESULT hr = project->GetClientByName(bstrName, &pClient);
 		if (SUCCEEDED(hr) && pClient) {

Modified: trunk/GME/MgaUtil/MgaUtil.vcxproj
==============================================================================
--- trunk/GME/MgaUtil/MgaUtil.vcxproj	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/MgaUtil.vcxproj	Thu Mar 31 12:49:49 2011	(r1235)
@@ -23,13 +23,13 @@
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseOfMfc>Dynamic</UseOfMfc>
     <UseOfAtl>Dynamic</UseOfAtl>
-    <CharacterSet>MultiByte</CharacterSet>
+    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseOfMfc>Dynamic</UseOfMfc>
     <UseOfAtl>Dynamic</UseOfAtl>
-    <CharacterSet>MultiByte</CharacterSet>
+    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">

Modified: trunk/GME/MgaUtil/PropertiesDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/PropertiesDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/PropertiesDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -61,7 +61,7 @@
 //		view->BeginTransaction(true);
 		{
 			COMTHROW(fco->get_RelID(&relid));
-			m_relid.Format("0x%08X", relid);
+			m_relid.Format(_T("0x%08X"), relid);
 		}
 		UpdateData(FALSE);
 		{
@@ -75,11 +75,11 @@
 		{
 			objtype_enum otype;
 			COMTHROW(fco->get_ObjType(&otype));
-			CString names[] = { "Invalid", "Model", "Atom", "Reference", "Connection", "Set", "Folder" };
+			CString names[] = { _T("Invalid"), _T("Model"), _T("Atom"), _T("Reference"), _T("Connection"), _T("Set"), _T("Folder") };
 
 			CString nm;
 			
-			nm.Format("%s Properties", names[otype]);
+			nm.Format(_T("%s Properties"), names[otype]);
 
 			this->SetWindowText(nm);
 
@@ -95,22 +95,22 @@
 					VARIANT_BOOL b;
 					COMTHROW(fco->get_IsInstance(&b));
 					if(b != VARIANT_FALSE) {
-						nm.Format("%s (instance of %s)",names[otype],tnm);
+						nm.Format(_T("%s (instance of %s)"),names[otype],tnm);
 #pragma bookmark (allow name changes for now__ it is allowed in propbar anyways)
 //						nameBox.SetReadOnly(true);
 					}
 					else
-						nm.Format("%s (subtype of %s)",names[otype],tnm);
+						nm.Format(_T("%s (subtype of %s)"),names[otype],tnm);
 				}
 				else
-					nm.Format("%s (archetype)",names[otype]);
+					nm.Format(_T("%s (archetype)"),names[otype]);
 			}
 			type.SetWindowText(nm);
 		}
 		{
 			CComPtr<IMgaMetaFCO> metaFco;
 			COMTHROW(fco->get_Meta(&metaFco));
-			CString txt = "N/A";
+			CString txt = _T("N/A");
 			if(metaFco != 0) {
 				CComBSTR bstr;
 				COMTHROW(metaFco->get_DisplayedName(&bstr));
@@ -119,13 +119,13 @@
 			kind.SetWindowText(txt);
 			metaref_type mid = 0;
 			COMTHROW(metaFco->get_MetaRef(&mid));
-			txt.Format("%ld",(long)mid);
+			txt.Format(_T("%ld"),(long)mid);
 			metaid.SetWindowText(txt);
 		}
 		{
 			CComPtr<IMgaMetaRole> metaRole;
 			COMTHROW(fco->get_MetaRole(&metaRole));
-			CString txt = "N/A";
+			CString txt = _T("N/A");
 			if(metaRole != 0) {
 				CComBSTR bstr;
 				COMTHROW(metaRole->get_DisplayedName(&bstr));
@@ -136,11 +136,11 @@
 		{
 			ID_type id = 0;
  			COMTHROW(fco->get_ID(&id));
-  			CString txt = CString("")+id;
+  			CString txt = CString(_T(""))+id;
   			objectid.SetWindowText(txt);
 		}
 		{
-			etc.SetWindowText("N/A");
+			etc.SetWindowText(_T("N/A"));
 			CComPtr<IMgaReference> ref;
 			if(fco.QueryInterface(&ref) == S_OK) {
 				CComPtr<IMgaFCO> refd;
@@ -161,15 +161,15 @@
 						CopyTo(bstr,kindDisplayedName);
 					}
 					CString txt;
-					txt.Format("-> %s (%s)",name,kindDisplayedName);
+					txt.Format(_T("-> %s (%s)"),name,kindDisplayedName);
 					etc.SetWindowText(txt);
 				}
 				else
-					etc.SetWindowText("-> null");
+					etc.SetWindowText(_T("-> null"));
 			}
 		}
 		{
-			CString txt = "N/A";
+			CString txt = _T("N/A");
 			CComPtr<IMgaFCO> asc;
 			COMTHROW(fco->get_DerivedFrom(&asc));
 			if(asc) {
@@ -178,18 +178,18 @@
 				if(fco.QueryInterface(&ref) == S_OK) {
 		 			COMTHROW(ref->CompareToBase(&depends));
 					if(depends > 0)
-						txt = "Not a dependent";
+						txt = _T("Not a dependent");
 					else 
-						txt = "Dependent";
+						txt = _T("Dependent");
 				}
 				else {
 					CComPtr<IMgaSet> set;
 					if(fco.QueryInterface(&set) == S_OK) {
 			 			COMTHROW(set->CompareToBase(&depends));
 						if(depends > 0)
-							txt = "Not a Dependent";
+							txt = _T("Not a Dependent");
 						else 
-							txt = "Dependent";
+							txt = _T("Dependent");
 					}
 				}
 			}
@@ -201,7 +201,7 @@
 
 			bool first = true;
 
-			CString txt = "-";
+			CString txt = _T("-");
 
 			objtype_enum objtype;
 
@@ -219,7 +219,7 @@
 
 			if((parts != NULL)) {
 
-				txt = "";
+				txt = _T("");
 
 				MGACOLL_ITERATE(IMgaPart,parts) {
 
@@ -232,7 +232,7 @@
 					COMTHROW( impart_ix->get_MetaAspect(&asp) );
 					COMTHROW( asp->get_Name(&aspname) );
 
-					if (!first) { txt += "; "; } 
+					if (!first) { txt += _T("; "); } 
 					else { first = false; }
 
 					txt += CString(aspname);
@@ -248,7 +248,7 @@
 
 					if (vb_pri_asp != VARIANT_FALSE) {
 
-						txt += " (primary)";
+						txt += _T(" (primary)");
 					}
 				}
 				MGACOLL_ITERATE_END;

Modified: trunk/GME/MgaUtil/RegistryBrowserDlg.cpp
==============================================================================
--- trunk/GME/MgaUtil/RegistryBrowserDlg.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/RegistryBrowserDlg.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -375,7 +375,7 @@
 			UpdateData(TRUE);
 			if (oldnode->status == ATTSTATUS_HERE) {
 				oldnode->value = m_regnodeValue;
-				oldnode->value.Replace("\r\n","\n"); // Remove Win32 GUI line ends
+				oldnode->value.Replace(_T("\r\n"),_T("\n")); // Remove Win32 GUI line ends
 			}
 		}
 	}

Modified: trunk/GME/MgaUtil/RegistryTree.cpp
==============================================================================
--- trunk/GME/MgaUtil/RegistryTree.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/RegistryTree.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -57,7 +57,7 @@
 			dlg->UpdateData(TRUE);
 			if (oldnode->status == ATTSTATUS_HERE) {
 				oldnode->value = dlg->m_regnodeValue;
-				oldnode->value.Replace("\r\n","\n"); // Remove Win32 GUI line ends
+				oldnode->value.Replace(_T("\r\n"),_T("\n")); // Remove Win32 GUI line ends
 			}
 		}
 	}
@@ -70,25 +70,25 @@
 			dlg->m_regnodePath = newnode->path;
 			switch (newnode->status) {
 			case ATTSTATUS_HERE:
-				dlg->m_regnodeStatus = "HERE";
+				dlg->m_regnodeStatus = _T("HERE");
 				break;
 			case ATTSTATUS_METADEFAULT:
-				dlg->m_regnodeStatus = "METADEFAULT";
+				dlg->m_regnodeStatus = _T("METADEFAULT");
 				break;
 			case ATTSTATUS_UNDEFINED:
-				dlg->m_regnodeStatus = "UNDEFINED";
+				dlg->m_regnodeStatus = _T("UNDEFINED");
 				break;
 			case ATTSTATUS_INVALID:
-				dlg->m_regnodeStatus = "INVALID";
+				dlg->m_regnodeStatus = _T("INVALID");
 				break;
 			default:
 				CString inherited;
-				inherited.Format("INHERITED (distance: %ld)", newnode->status);
+				inherited.Format(_T("INHERITED (distance: %ld)"), newnode->status);
 				dlg->m_regnodeStatus = inherited;
 				break;
 			}
 			dlg->m_regnodeValue = newnode->value;
-			dlg->m_regnodeValue.Replace("\n", "\r\n"); // Add Win32 GUI line ends
+			dlg->m_regnodeValue.Replace(_T("\n"), _T("\r\n")); // Add Win32 GUI line ends
 			dlg->UpdateData(FALSE);
 		}
 	}
@@ -154,11 +154,11 @@
 	CRegBrwNode *oldNode = (hItem == TVI_ROOT) ? NULL : (CRegBrwNode*)GetItemData(hItem);
 	
 	CRegBrwNode *newNode = new CRegBrwNode();
-	newNode->name = "New Node";
+	newNode->name = _T("New Node");
 	newNode->parent = oldNode;
 	newNode->status = ATTSTATUS_HERE;
-	newNode->value = "";
-	newNode->path = (hItem == TVI_ROOT) ? newNode->name : oldNode->path + "/" + newNode->name;
+	newNode->value = _T("");
+	newNode->path = (hItem == TVI_ROOT) ? newNode->name : oldNode->path + _T("/") + newNode->name;
 	
 	int imageNum;
 	dlg->m_imageMap.Lookup(IDI_ICON_REGHERE, imageNum);
@@ -181,21 +181,21 @@
 	if (hItem) {
 		CRegBrwNode* node= (CRegBrwNode*)GetItemData(hItem);
 		node->status = ATTSTATUS_UNDEFINED;
-		node->value = "";
+		node->value = _T("");
 		CRegistryBrowserDlg *dlg = (CRegistryBrowserDlg *)(GetParent());
-		dlg->m_regnodeStatus = "UNDEFINED";
-		dlg->m_regnodeValue = "";
+		dlg->m_regnodeStatus = _T("UNDEFINED");
+		dlg->m_regnodeValue = _T("");
 		dlg->UpdateData(FALSE);
 		int imageNum;
 		dlg->m_imageMap.Lookup(IDI_ICON_REGUNDEF, imageNum);
 		SetItemImage(hItem, imageNum, imageNum);
-		AfxMessageBox("Inherited nodes will not be shown until you save the changes.\nClick on the OK button, and start the Registry Browser again to see them !", MB_ICONINFORMATION | MB_OK);
+		AfxMessageBox(_T("Inherited nodes will not be shown until you save the changes.\nClick on the OK button, and start the Registry Browser again to see them !"), MB_ICONINFORMATION | MB_OK);
 	}
 }
 
 void CRegistryTree::OnCntxRemoveall() 
 {
-	if( AfxMessageBox("Would you like to delete all nodes?", MB_YESNO | MB_ICONWARNING) == IDYES)
+	if( AfxMessageBox(_T("Would you like to delete all nodes?"), MB_YESNO | MB_ICONWARNING) == IDYES)
 	{
 		HTREEITEM hNextItem, hItem = GetRootItem();
 		while ( hItem != NULL)
@@ -205,7 +205,7 @@
 			DeleteItem(hItem);
 			hItem = hNextItem;
 		}
-		AfxMessageBox("Inherited nodes will not be shown until you save the changes.\nClick on the OK button, and start the Registry Browser again to see them !", MB_ICONINFORMATION | MB_OK);
+		AfxMessageBox(_T("Inherited nodes will not be shown until you save the changes.\nClick on the OK button, and start the Registry Browser again to see them !"), MB_ICONINFORMATION | MB_OK);
 	}
 }
 
@@ -215,7 +215,7 @@
 	if (hItem) {
 		RemoveSubTree(hItem);
 		DeleteItem(hItem);
-		AfxMessageBox("Inherited nodes will not be shown until you save the changes.\nClick on the OK button, and start the Registry Browser again to see them !", MB_ICONINFORMATION | MB_OK);
+		AfxMessageBox(_T("Inherited nodes will not be shown until you save the changes.\nClick on the OK button, and start the Registry Browser again to see them !"), MB_ICONINFORMATION | MB_OK);
 	}
 	
 }
@@ -248,13 +248,13 @@
 				CRegBrwNode *node = (CRegBrwNode*)GetItemData(hItem);
 				if (node) {
 					if (CString(pTVDispInfo->item.pszText).Find('/') != -1) {
-						AfxMessageBox("Cannot rename registry node.\nThe name you specified contains '/' character. Specify a different name!", MB_ICONSTOP | MB_OK);
+						AfxMessageBox(_T("Cannot rename registry node.\nThe name you specified contains '/' character. Specify a different name!"), MB_ICONSTOP | MB_OK);
 						*pResult = FALSE;
 						return;
 					}
 
 					if ( (node->status != ATTSTATUS_HERE) || ItemHasChildren(hItem)) {
-						AfxMessageBox("Only leaf nodes defined in this FCO can be renamed.", MB_ICONSTOP | MB_OK);
+						AfxMessageBox(_T("Only leaf nodes defined in this FCO can be renamed."), MB_ICONSTOP | MB_OK);
 						*pResult = FALSE;
 						return;
 					}
@@ -266,7 +266,7 @@
 					while (hNextItem) {
 						CString nodeName = GetItemText(hNextItem);
 						if ((nodeName == pTVDispInfo->item.pszText) && (hNextItem != hItem)) {
-							AfxMessageBox("Cannot rename registry node.\nA node with the name you specified already exists. Specify a different name!", MB_ICONSTOP | MB_OK);
+							AfxMessageBox(_T("Cannot rename registry node.\nA node with the name you specified already exists. Specify a different name!"), MB_ICONSTOP | MB_OK);
 							CEdit *eLabel = EditLabel(hItem);
 							eLabel->SetWindowText(pTVDispInfo->item.pszText);
 							eLabel->SetSel(0,-1);

Modified: trunk/GME/MgaUtil/SplitterBar.cpp
==============================================================================
--- trunk/GME/MgaUtil/SplitterBar.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/SplitterBar.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -42,7 +42,7 @@
 {
 	CWnd* pWnd = this;
 	m_bHorizontal=bHorizontal;
-	return pWnd->Create(NULL, "", dwStyle, rect, pParentWnd, nID);
+	return pWnd->Create(NULL, _T(""), dwStyle, rect, pParentWnd, nID);
 }
 
 /////////////////////////////////////////////////////////////////////////////

Modified: trunk/GME/MgaUtil/colorbtn.cpp
==============================================================================
--- trunk/GME/MgaUtil/colorbtn.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/MgaUtil/colorbtn.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -257,8 +257,8 @@
 
 BOOL CColorBtn::Store()
 {
-    return (AfxGetApp()->WriteProfileBinary("ColorData", "ColorTable",(LPBYTE)CColorBtnDlg::colors,sizeof(COLORREF)*20) &&
-            AfxGetApp()->WriteProfileBinary("ColorData", "MRU",(LPBYTE)CColorBtnDlg::used,sizeof(BYTE)*20));
+    return (AfxGetApp()->WriteProfileBinary(_T("ColorData"), _T("ColorTable"),(LPBYTE)CColorBtnDlg::colors,sizeof(COLORREF)*20) &&
+            AfxGetApp()->WriteProfileBinary(_T("ColorData"), _T("MRU"),CColorBtnDlg::used,sizeof(CColorBtnDlg::used)));
 
 }
 
@@ -269,7 +269,7 @@
 
     // This function allocates the memory it needs
 
-    AfxGetApp()->GetProfileBinary("ColorData", "ColorTable",&data,&size);	
+    AfxGetApp()->GetProfileBinary(_T("ColorData"), _T("ColorTable"),&data,&size);	
 
     if (data)
     {
@@ -278,7 +278,7 @@
         memcpy((void *)CColorBtnDlg::colors,(void *)data,size);
         free((void *)data);
 
-        AfxGetApp()->GetProfileBinary("ColorData", "MRU",&data,&size);	
+        AfxGetApp()->GetProfileBinary(_T("ColorData"), _T("MRU"),&data,&size);	
 
         if (data)
         {

Modified: trunk/GME/ObjectInspector/Preference.cpp
==============================================================================
--- trunk/GME/ObjectInspector/Preference.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/ObjectInspector/Preference.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -200,11 +200,11 @@
 
 CPreference::CPreference()
 {
-	nConnTableLength = sizeof(m_szConnectionPreferenceTable)/sizeof(char*)/5;
-	nAtomTableLength = sizeof(m_szAtomPreferenceTable)/sizeof(char*)/5;
-	nModelTableLength= sizeof(m_szModelPreferenceTable)/sizeof(char*)/5;
-	nProxyTableLength= sizeof(m_szProxyPreferenceTable)/sizeof(char*)/5;
-	nSetTableLength=   sizeof(m_szSetPreferenceTable)/sizeof(char*)/5;
+	nConnTableLength = sizeof(m_szConnectionPreferenceTable)/sizeof(TCHAR*)/5;
+	nAtomTableLength = sizeof(m_szAtomPreferenceTable)/sizeof(TCHAR*)/5;
+	nModelTableLength= sizeof(m_szModelPreferenceTable)/sizeof(TCHAR*)/5;
+	nProxyTableLength= sizeof(m_szProxyPreferenceTable)/sizeof(TCHAR*)/5;
+	nSetTableLength=   sizeof(m_szSetPreferenceTable)/sizeof(TCHAR*)/5;
 
 	// Get system background color
 	COLORREF crSysBckg=::GetSysColor(COLOR_WINDOW);

Modified: trunk/GME/PanningView/PanningView.vcxproj
==============================================================================
--- trunk/GME/PanningView/PanningView.vcxproj	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/PanningView/PanningView.vcxproj	Thu Mar 31 12:49:49 2011	(r1235)
@@ -23,13 +23,13 @@
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseOfMfc>Dynamic</UseOfMfc>
     <UseOfAtl>Dynamic</UseOfAtl>
-    <CharacterSet>MultiByte</CharacterSet>
+    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseOfMfc>Dynamic</UseOfMfc>
     <UseOfAtl>Dynamic</UseOfAtl>
-    <CharacterSet>MultiByte</CharacterSet>
+    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
@@ -162,4 +162,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>
\ No newline at end of file

Modified: trunk/GME/Parser/GenParser.cpp
==============================================================================
--- trunk/GME/Parser/GenParser.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/GenParser.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -10,9 +10,20 @@
 #include <stdio.h>
 #include <string>
 #include "atlstr.h"
+#include <comutil.h>
 
 // --------------------------- XmlStr
 
+#ifdef UNICODE
+XmlStr::XmlStr(const XMLCh* const input) : std::tstring(input)
+{
+}
+
+XmlStr::XmlStr(const XMLCh* const input, unsigned int len) : std::tstring(input)
+{
+	resize(len);
+}
+#else
 XmlStr::XmlStr(const XMLCh* const input)
 {
 	resize(GetCharLength(input, -1));
@@ -26,37 +37,38 @@
 	resize(GetCharLength(input, len));
 	CopyTo(input, len, &(operator[](0)), length());
 }
+#endif
 
 void CGenParser::SetErrorInfo2(HRESULT hr)
 {
-	std::string str;
-	Format(str, "in file %s at line %ld, char %ld", 
+	std::tstring str;
+	Format(str, _T("in file %s at line %ld, char %ld"), 
 		xmlfile.c_str(), err_line, err_column);
 
-	SetErrorInfo(hr, PutInBstr(str));
+	SetErrorInfo(hr, _bstr_t(str.c_str()));
 }
 
-void CGenParser::ThrowXmlError(const char *format, ...)
+void CGenParser::ThrowXmlError(const TCHAR *format, ...)
 {
 	ASSERT( format != NULL );
 
 	va_list args;
 	va_start(args, format);
 
-	std::string desc;
-	vFormat(desc, format, args);
+	std::tstring desc;
+	Format(desc, format, args);
 
-	std::string str;
+	std::tstring str;
 	if( locator != NULL )
 		Format(str, 
-			"XML parser error in file %s at line %d, char %d : %s",
+			_T("XML parser error in file %s at line %d, char %d : %s"),
 			xmlfile.c_str(), (int)locator->getLineNumber(),
 			(int)locator->getColumnNumber(), desc.c_str());
 	else
 		Format(str,
-			"XML parser error in file %s : %s", xmlfile.c_str(), desc.c_str());
+			_T("XML parser error in file %s : %s"), xmlfile.c_str(), desc.c_str());
 
-	CopyTo(str, errorinfo);
+	errorinfo = str.c_str();
 	HR_THROW(E_XMLPARSER);
 }
 
@@ -67,13 +79,13 @@
 	do
 	{
 		XmlStr sysid = systemId;
-		std::string syssid = sysid;
+		std::tstring syssid = sysid;
 
-		HMODULE hm = GetModuleHandle("PARSER.DLL");
+		HMODULE hm = GetModuleHandle(_T("PARSER.DLL"));
 		if( hm == NULL )
 			break;
 
-		HRSRC res = FindResource(hm, syssid.c_str(), "DTD");
+		HRSRC res = FindResource(hm, syssid.c_str(), _T("DTD"));
 		if(res) {
 			XMLByte *bytes = (XMLByte *)LockResource(LoadResource(hm, res));
 			if(!bytes) COMTHROW(E_INVALID_DTD); 
@@ -81,18 +93,18 @@
 		}
 
 		
-		char filename[200];
+		TCHAR filename[200];
 		int a = GetModuleFileName(hm, filename, 200);
 		a -= 10;
 		if( a <= 0 )
 			break;
 
-		if( _stricmp(filename + a, "PARSER.DLL") != 0 )
+		if( _tcsicmp(filename + a, _T("PARSER.DLL")) != 0 )
 			break;
 
-		strcpy(filename + a, sysid.c_str());
+		_tcscpy(filename + a, sysid.c_str());
 
-		FILE *file = fopen(filename, "r");
+		FILE *file = _tfopen(filename, _T("r"));
 		if( file == NULL )
 			break;
 
@@ -124,7 +136,7 @@
 		cur_line = (int)locator->getLineNumber();
 		cur_column = (int)locator->getColumnNumber();
 		// CString msg;
-		// msg.Format("Line %d, Col: %d\n", cur_line, cur_column);
+		// msg.Format(_T("Line %d, Col: %d\n"), cur_line, cur_column);
 		// OutputDebugString(msg);
 	}
 #endif
@@ -136,7 +148,7 @@
 		unsigned int len = attrlist.getLength();
 		for(unsigned int index = 0; index < len; index++)
 		{
-			attributes.push_back( std::pair<std::string,std::string>(
+			attributes.push_back( std::pair<std::tstring,std::tstring>(
 				XmlStr(attrlist.getName(index)), XmlStr(attrlist.getValue(index))) );
 		}
 
@@ -167,9 +179,9 @@
 
 			// we compose and set the error message for exceptions
 			// [which come from the MGA layer because of meta incompatibility]
-			std::string str;
-			Format(str, "Improper use of object error in file %s at line %d, char %d.", xmlfile.c_str(), err_line, err_column);
-			CopyTo(str, errorinfo);
+			std::tstring str;
+			Format(str, _T("Improper use of object error in file %s at line %d, char %d."), xmlfile.c_str(), err_line, err_column);
+			errorinfo = str.c_str();
 		}
 
 		throw;
@@ -213,9 +225,9 @@
 
 			// we compose and set the error message for exceptions
 			// [which come from the MGA layer because of meta incompatibility]
-			std::string str;
-			Format(str, "Improper use of object error in file %s at line %ld, char %ld.", xmlfile.c_str(), err_line, err_column);
-			CopyTo(str, errorinfo);
+			std::tstring str;
+			Format(str, _T("Improper use of object error in file %s at line %ld, char %ld."), xmlfile.c_str(), err_line, err_column);
+			errorinfo = str.c_str();
 		}
 
 		throw;
@@ -232,7 +244,7 @@
 void CGenParser::error(const SAXParseException &e)
 {
 	ThrowXmlError(
-		"(at line %d, char %d) %s",
+		_T("(at line %d, char %d) %s"),
 		(int)e.getLineNumber(),(int)e.getColumnNumber(),
 		XmlStr(e.getMessage()).c_str());
 }
@@ -249,7 +261,7 @@
 
 // ------- Attributes
 
-const std::string *CGenParser::GetByNameX(const attributes_type &attributes, const char *name)
+const std::tstring *CGenParser::GetByNameX(const attributes_type &attributes, const TCHAR *name)
 {
 	attributes_iterator i = attributes.begin();
 	attributes_iterator e = attributes.end();
@@ -264,12 +276,12 @@
 	return NULL;
 }
 
-long CGenParser::toLong(std::string s)
+long CGenParser::toLong(std::tstring s)
 {
-	const char *c = s.c_str();
-	char *e;
+	const TCHAR *c = s.c_str();
+	TCHAR *e;
 
-	long a = strtol(c, &e, 0);
+	long a = _tcstol(c, &e, 0);
 
 	if( (e - c) != (int) s.length() )
 		HR_THROW(E_INVALID_XML_LONG);
@@ -277,12 +289,12 @@
 	return a;
 }
 
-unsigned long CGenParser::toULong(std::string s)
+unsigned long CGenParser::toULong(std::tstring s)
 {
-	const char *c = s.c_str();
-	char *e;
+	const TCHAR *c = s.c_str();
+	TCHAR *e;
 
-	long a = strtoul(c, &e, 0);
+	long a = _tcstoul(c, &e, 0);
 
 	if( (e - c) != (int) s.length() )
 		HR_THROW(E_INVALID_XML_LONG);

Modified: trunk/GME/Parser/GenParser.h
==============================================================================
--- trunk/GME/Parser/GenParser.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/GenParser.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -3,6 +3,7 @@
 #define MGA_GENPARSER_H
 
 #include <xercesc/sax/HandlerBase.hpp>
+#include <comutil.h>
 
 XERCES_CPP_NAMESPACE_USE
 
@@ -14,7 +15,7 @@
 
 // --------------------------- XmlStr
 
-class XmlStr : public std::string
+class XmlStr : public std::tstring
 {
 public:
 	XmlStr() { };
@@ -29,7 +30,7 @@
 class CGenParser : public HandlerBase
 {
 public:
-	typedef std::vector< std::pair<std::string, std::string> > attributes_type;
+	typedef std::vector< std::pair<std::tstring, std::tstring> > attributes_type;
 	typedef attributes_type::const_iterator attributes_iterator;
 
 
@@ -39,7 +40,7 @@
 
 public:
 	void SetErrorInfo2(HRESULT hr);
-	void ThrowXmlError(const char *format, ...);
+	void ThrowXmlError(const TCHAR *format, ...);
 
 // ------- Handler Base
 
@@ -58,8 +59,8 @@
     virtual void fatalError(const SAXParseException& exception);
 
 	virtual void setDocumentLocator(const Locator *const locator);
-	virtual void fireStartFunction(const std::string& name, const attributes_type& attributes) = 0;
-	virtual void fireEndFunction(const std::string& name) = 0;
+	virtual void fireStartFunction(const std::tstring& name, const attributes_type& attributes) = 0;
+	virtual void fireEndFunction(const std::tstring& name) = 0;
 
 public:
 	const Locator *locator;
@@ -70,12 +71,12 @@
 	
 
 
-	static const std::string *GetByNameX(const attributes_type &attributes, const char *name);
+	static const std::tstring *GetByNameX(const attributes_type &attributes, const TCHAR *name);
 
-	static const std::string &GetByName(const attributes_type &attributes, const char *name)
+	static const std::tstring &GetByName(const attributes_type &attributes, const TCHAR *name)
 	{
-		const std::string *p = GetByNameX(attributes, name);
-		const static std::string nullstr;
+		const std::tstring *p = GetByNameX(attributes, name);
+		const static std::tstring nullstr;
 
 		if( p == NULL ) p = &nullstr;
 //			HR_THROW(E_INVALID_DTD);
@@ -84,7 +85,7 @@
 	}
 
 	template<class INTERFACE, class FUNC_INTERFACE>
-	void Attr(attributes_iterator i, const char *name, INTERFACE p, 
+	void Attr(attributes_iterator i, const TCHAR *name, INTERFACE p, 
 		HRESULT (__stdcall FUNC_INTERFACE::*func)(BSTR))
 	{
 		if( i->first == name )
@@ -96,11 +97,11 @@
 		}
 	}
 
-	static long toLong(std::string s);
-	static unsigned long toULong(std::string s);
+	static long toLong(std::tstring s);
+	static unsigned long toULong(std::tstring s);
 
 	template<class INTERFACE, class FUNC_INTERFACE>
-	void Attr(attributes_iterator i, const char *name, INTERFACE p,
+	void Attr(attributes_iterator i, const TCHAR *name, INTERFACE p,
 	HRESULT (__stdcall FUNC_INTERFACE::*func)(long))
 	{
 		if( i->first == name )
@@ -113,7 +114,7 @@
 	}
 
 	template<class INTERFACE, class FUNC_INTERFACE>
-	void Attr(attributes_iterator i, const char *name, INTERFACE p,
+	void Attr(attributes_iterator i, const TCHAR *name, INTERFACE p,
 	HRESULT (__stdcall FUNC_INTERFACE::*func)(unsigned long))
 	{
 		if( i->first == name )
@@ -138,8 +139,8 @@
 // ------- Properties
 
 public:
-	std::string xmlfile;
-	CComBstrObj errorinfo;
+	std::tstring xmlfile;
+	_bstr_t errorinfo;
 	long err_line;
 	long err_column;
 
@@ -148,10 +149,10 @@
 
 	struct element_type
 	{
-		std::string name;
-		std::string chardata;
+		std::tstring name;
+		std::tstring chardata;
 		CComObjPtr<IUnknown> object;
-		std::string exstrinfo;
+		std::tstring exstrinfo;
 		long   exnuminfo;
 
 		counter_type begin;
@@ -171,8 +172,8 @@
 		return *i;
 	}
 
-	std::string &GetCurrData() { return GetCurrent().chardata; }
-	const std::string &GetPrevName() const { return GetPrevious().name; }
+	std::tstring &GetCurrData() { return GetCurrent().chardata; }
+	const std::tstring &GetPrevName() const { return GetPrevious().name; }
 	
 	template<class T>
 	void GetPrevObj(CComObjPtr<T> &obj) const
@@ -182,13 +183,13 @@
 		ASSERT( obj != NULL );
 	}
 
-	PutInBstr PutInBstrAttr(const attributes_type &attributes, const char *name)
+	_bstr_t PutInBstrAttr(const attributes_type &attributes, const TCHAR *name)
 	{
-		const std::string *s = GetByNameX(attributes, name);
+		const std::tstring *s = GetByNameX(attributes, name);
 		if( s == NULL )
-			return "";
+			return _bstr_t("");
 
-		return *s;
+		return _bstr_t(s->c_str());
 	}
 };
 
@@ -198,7 +199,7 @@
 {
 	CGenParserFunc_Base(const char *n) : name(n) { }
 
-	std::string name;
+	std::tstring name;
 
 	virtual void Start(CGenParser *parser, const CGenParser::attributes_type &attributes) = 0;
 	virtual void End(CGenParser *parser) = 0;
@@ -210,9 +211,9 @@
 	typedef void (DERIVED::*StartFunc)(const CGenParser::attributes_type &);
 	typedef void (DERIVED::*EndFunc)();
 
-	CGenParserFunc(const char *n) : name(n) { }
+	CGenParserFunc(const TCHAR *n) : name(n) { }
 
-	std::string name;
+	std::tstring name;
 
 	virtual void Start(CGenParser *parser, const CGenParser::attributes_type &attributes)
 	{ 
@@ -224,7 +225,7 @@
 		(static_cast<DERIVED*>(parser)->*end)();
 	}
 
-	CGenParserFunc(const char *n, StartFunc s, EndFunc e) : 
+	CGenParserFunc(const TCHAR *n, StartFunc s, EndFunc e) : 
 		name(n), start(s), end(e) { }
 
 	StartFunc start;

Modified: trunk/GME/Parser/Helper.cpp
==============================================================================
--- trunk/GME/Parser/Helper.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/Helper.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -5,18 +5,18 @@
 // bool include_separator:
 //	true : includes the separator in the token
 //	false: does not include the separator character in the token
-std::list<std::string> tokenizer( std::string m, char separator /*= '/' */, bool include_separator /* = true */)
+std::list<std::tstring> tokenizer( std::tstring m, TCHAR separator /*= '/' */, bool include_separator /* = true */)
 {
 	int offs = include_separator?0:1;
-	std::list<std::string> r;
-	std::string last;
+	std::list<std::tstring> r;
+	std::tstring last;
 	while( !m.empty())
 	{
 		int i = m.find(separator, 1);
 		if( i == -1)
 		{
 			r.push_back( m);
-			m = "";
+			m = _T("");
 		}
 		else if( i != 0)
 		{
@@ -30,11 +30,11 @@
 
 //
 // does not include the separator character in the token
-bool findExact( const std::string& m, const std::string& to_find)
+bool findExact( const std::tstring& m, const std::tstring& to_find)
 {
-	std::list< std::string> tokens = tokenizer( m, ' ', false);
-	std::list< std::string>::iterator i = tokens.begin();
-	std::list< std::string>::iterator e = tokens.end();
+	std::list< std::tstring> tokens = tokenizer( m, _T(' '), false);
+	std::list< std::tstring>::iterator i = tokens.begin();
+	std::list< std::tstring>::iterator e = tokens.end();
 	while( i != e && (*i).compare( to_find) != 0)
 		++i;
 
@@ -42,25 +42,25 @@
 }
 
 // it calculates nm1's name relatively to nm2
-std::string makeRel( std::string& nm1, std::string& nm2)
+std::tstring makeRel( std::tstring& nm1, std::tstring& nm2)
 {
-	std::list<std::string> r1 = tokenizer( nm1);
-	std::list<std::string> r2 = tokenizer( nm2);
+	std::list<std::tstring> r1 = tokenizer( nm1);
+	std::list<std::tstring> r2 = tokenizer( nm2);
 
-	std::list<std::string>::iterator i1 = r1.begin();
-	std::list<std::string>::iterator i2 = r2.begin();
+	std::list<std::tstring>::iterator i1 = r1.begin();
+	std::list<std::tstring>::iterator i2 = r2.begin();
 	while( i1 != r1.end() && i2 != r2.end() && *i1 == *i2)
 	{
 		++i1;
 		++i2;
 	}
 
-	std::string relpath;
+	std::tstring relpath;
 	int count = 0; // how many levels in nm2
-	while( i2 != r2.end()) ++i2, ++count, relpath +="/@..";
+	while( i2 != r2.end()) ++i2, ++count, relpath +=_T("/@..");
 	while( i1 != r1.end()) relpath +=*i1, ++i1;
 
-	if( relpath == "") // same name nm1 and nm2
+	if( relpath == _T("")) // same name nm1 and nm2
 	{
 		ASSERT( nm1 == nm2);
 		//#1 solution: to give back the path as it goes back to the topmost level
@@ -70,25 +70,25 @@
 		relpath += nm1;*/
 
 		//#2 solution: to use a shorter form (only one step up): /@../name
-		relpath = "/@.." + *r2.rbegin();
+		relpath = _T("/@..") + *r2.rbegin();
 	}
 	return relpath;
 }
 
-std::string makeViewable( const std::string& m)
+std::tstring makeViewable( const std::tstring& m)
 {
-	std::string res;
-	std::list<std::string> r1 = tokenizer( m);
-	std::list<std::string>::iterator i1 = r1.begin();
+	std::tstring res;
+	std::list<std::tstring> r1 = tokenizer( m);
+	std::list<std::tstring>::iterator i1 = r1.begin();
 	while( i1 != r1.end())
 	{
-		std::string p = *i1;
-		if( p.substr(0, 2) == "/@")
-			p = p.substr(2); // "/@"
-		int pos = p.find("|kind=");
+		std::tstring p = *i1;
+		if( p.substr(0, 2) == _T("/@"))
+			p = p.substr(2); // _T("/@")
+		int pos = p.find(_T("|kind="));
 		if( pos != -1) p = p.substr( 0, pos);
 
-		res += '/' + p;
+		res += _T('/') + p;
 		++i1;
 	}
 	
@@ -96,51 +96,51 @@
 }
 
 
-std::string makeNameViewable( const std::string& m)
+std::tstring makeNameViewable( const std::tstring& m)
 {
-	std::string res = m;
-	if( res.substr(0, 2) == "/@")
+	std::tstring res = m;
+	if( res.substr(0, 2) == _T("/@"))
 		res = res.substr(2);
 
-	ASSERT( res.find( "/@") == -1); //no more than one token
+	ASSERT( res.find( _T("/@")) == -1); //no more than one token
 
-	int pos = res.find("|kind=");
+	int pos = res.find(_T("|kind="));
 	if( pos != -1)
 		res = res.substr( 0, pos);
 
 	return res;
 }
 
-CComBSTR makeLink( CComObjPtr<IMgaObject> p_obj, const std::string& nm2, bool use_anyway_nm_2)
+CComBSTR makeLink( CComObjPtr<IMgaObject> p_obj, const std::tstring& nm2, bool use_anyway_nm_2)
 {
 	CComBSTR bstr, id, nm;
 	COMTHROW( p_obj->get_ID( &id));
 	COMTHROW( p_obj->get_Name( &nm));
-	if( nm == 0 || nm == "" || use_anyway_nm_2) // if called from the Start... (or just derived) then the name its not yet parsed
+	if( nm == 0 || nm == _T("") || use_anyway_nm_2) // if called from the Start... (or just derived) then the name its not yet parsed
 		nm = nm2.c_str();
-	bstr.Append("<A HREF=\"mga:");
+	bstr.Append(L"<A HREF=\"mga:");
 	bstr.AppendBSTR( id);
-	bstr.Append("\">");
+	bstr.Append(L"\">");
 	if( nm.Length() != 0)
 		bstr.AppendBSTR( nm);
 	else
-		bstr.Append("emptyname");
-	bstr.Append("</A>");
+		bstr.Append(L"emptyname");
+	bstr.Append(L"</A>");
 
 	return bstr;
 }
 
-CComBSTR makeLink( CComObjPtr<IMgaFCO> p_fco, const std::string& nm_2, bool use_anyway_nm_2)
+CComBSTR makeLink( CComObjPtr<IMgaFCO> p_fco, const std::tstring& nm_2, bool use_anyway_nm_2)
 {
 	return makeLink( CComObjPtr<IMgaObject>( p_fco), nm_2, use_anyway_nm_2);
 }
 
-CComBSTR makeLink( CComObjPtr<IMgaSet> p_fco, const std::string& nm_2, bool use_anyway_nm_2)
+CComBSTR makeLink( CComObjPtr<IMgaSet> p_fco, const std::tstring& nm_2, bool use_anyway_nm_2)
 {
 	return makeLink( CComObjPtr<IMgaObject>( p_fco), nm_2, use_anyway_nm_2);
 }
 
-CComBSTR makeLink( CComObjPtr<IMgaReference> p_fco, const std::string& nm_2, bool use_anyway_nm_2)
+CComBSTR makeLink( CComObjPtr<IMgaReference> p_fco, const std::tstring& nm_2, bool use_anyway_nm_2)
 {
 	return makeLink( CComObjPtr<IMgaObject>( p_fco), nm_2, use_anyway_nm_2);
 }

Modified: trunk/GME/Parser/Helper.h
==============================================================================
--- trunk/GME/Parser/Helper.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/Helper.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -4,21 +4,21 @@
 #include <list>
 #include <string>
 
-std::list<std::string> tokenizer( std::string m, char separator = '/', bool include_separator = true);
+std::list<std::tstring> tokenizer( std::tstring m, TCHAR separator = '/', bool include_separator = true);
 
-bool findExact( const std::string& m, const std::string& to_find);
+bool findExact( const std::tstring& m, const std::tstring& to_find);
 
-std::string makeRel( std::string& nm, std::string& nm2);
+std::tstring makeRel( std::tstring& nm, std::tstring& nm2);
 
-std::string makeViewable( const std::string& m);
+std::tstring makeViewable( const std::tstring& m);
 
-std::string makeNameViewable( const std::string& m);
+std::tstring makeNameViewable( const std::tstring& m);
 
-CComBSTR makeLink( CComObjPtr<IMgaObject> obj, const std::string& nm_2 = "", bool use_anyway_nm_2 = false);
+CComBSTR makeLink( CComObjPtr<IMgaObject> obj, const std::tstring& nm_2 = _T(""), bool use_anyway_nm_2 = false);
 
-CComBSTR makeLink( CComObjPtr<IMgaFCO> obj, const std::string& nm_2 = "", bool use_anyway_nm_2 = false);
-CComBSTR makeLink( CComObjPtr<IMgaReference> obj, const std::string& nm_2 = "", bool use_anyway_nm_2 = false);
-CComBSTR makeLink( CComObjPtr<IMgaSet> obj, const std::string& nm_2 = "", bool use_anyway_nm_2 = false);
+CComBSTR makeLink( CComObjPtr<IMgaFCO> obj, const std::tstring& nm_2 = _T(""), bool use_anyway_nm_2 = false);
+CComBSTR makeLink( CComObjPtr<IMgaReference> obj, const std::tstring& nm_2 = _T(""), bool use_anyway_nm_2 = false);
+CComBSTR makeLink( CComObjPtr<IMgaSet> obj, const std::tstring& nm_2 = _T(""), bool use_anyway_nm_2 = false);
 
 
 #endif // HELPER_H_259823495872394857

Modified: trunk/GME/Parser/MetaParser.cpp
==============================================================================
--- trunk/GME/Parser/MetaParser.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MetaParser.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -134,8 +134,8 @@
 
 // ------- Attributes
 
-const std::string CMgaMetaParser::GetNextToken(std::string::const_iterator &i,
-	std::string::const_iterator &e, std::string::const_iterator end)
+const std::tstring CMgaMetaParser::GetNextToken(std::tstring::const_iterator &i,
+	std::tstring::const_iterator &e, std::tstring::const_iterator end)
 {
 	i = e;
 	while( i != end && *i == ' ' )
@@ -145,11 +145,11 @@
 	while( e != end && *e != ' ' )
 		++e;
 
-	return std::string(i, e);
+	return std::tstring(i, e);
 }
 
 
-void CMgaMetaParser::fireStartFunction(const std::string & namestr, const attributes_type& attributes)
+void CMgaMetaParser::fireStartFunction(const std::tstring & namestr, const attributes_type& attributes)
 {
 	if(currentPass == FIRST_PASS)
 	{
@@ -177,7 +177,7 @@
 }
 
 
-void CMgaMetaParser::fireEndFunction(const std::string & namestr)
+void CMgaMetaParser::fireEndFunction(const std::tstring & namestr)
 {
 	if(currentPass == FIRST_PASS)
 	{
@@ -209,40 +209,40 @@
 
 CMgaMetaParser::elementfunc CMgaMetaParser::elementfuncs_firstpass[] = 
 {
-	elementfunc("paradigm", StartParadigm, EndNone),
-	elementfunc("comment", StartNone, EndComment),
-	elementfunc("author", StartNone, EndAuthor),
-	elementfunc("dispname", StartNone, EndDispName),
-	elementfunc("folder", StartFolder, EndNone),
-	elementfunc("atom", StartAtom, EndNone),
-	elementfunc("model", StartModel, EndNone),
-	elementfunc("connection", StartConnection, EndNone),
-	elementfunc("reference", StartReference, EndNone),
-	elementfunc("set", StartSet, EndNone),
-	elementfunc("attrdef", StartAttrDef, EndNone),
-	elementfunc("regnode", StartRegNode, EndNone),
-	elementfunc("connjoint", StartConnJoint, EndNone),
-	elementfunc("pointerspec", StartPointerSpec, EndNone),
-	elementfunc("pointeritem", StartPointerItem, EndNone),
-	elementfunc("enumitem", StartEnumItem, EndNone),
-	elementfunc("constraint", StartConstraint, EndConstraint),
-	elementfunc("", NULL, NULL)
+	elementfunc(_T("paradigm"), StartParadigm, EndNone),
+	elementfunc(_T("comment"), StartNone, EndComment),
+	elementfunc(_T("author"), StartNone, EndAuthor),
+	elementfunc(_T("dispname"), StartNone, EndDispName),
+	elementfunc(_T("folder"), StartFolder, EndNone),
+	elementfunc(_T("atom"), StartAtom, EndNone),
+	elementfunc(_T("model"), StartModel, EndNone),
+	elementfunc(_T("connection"), StartConnection, EndNone),
+	elementfunc(_T("reference"), StartReference, EndNone),
+	elementfunc(_T("set"), StartSet, EndNone),
+	elementfunc(_T("attrdef"), StartAttrDef, EndNone),
+	elementfunc(_T("regnode"), StartRegNode, EndNone),
+	elementfunc(_T("connjoint"), StartConnJoint, EndNone),
+	elementfunc(_T("pointerspec"), StartPointerSpec, EndNone),
+	elementfunc(_T("pointeritem"), StartPointerItem, EndNone),
+	elementfunc(_T("enumitem"), StartEnumItem, EndNone),
+	elementfunc(_T("constraint"), StartConstraint, EndConstraint),
+	elementfunc(_T(""), NULL, NULL)
 };
 
 CMgaMetaParser::elementfunc CMgaMetaParser::elementfuncs_secondpass[] = 
 {
-	elementfunc("folder", StartFolder2, EndNone),
-	elementfunc("model", StartFCO2, EndNone),
-	elementfunc("atom", StartFCO2, EndNone),
-	elementfunc("connection", StartFCO2, EndNone),
-	elementfunc("reference", StartFCO2, EndNone),
-	elementfunc("set", StartFCO2, EndNone),
-	elementfunc("role", StartRole2, EndNone),
-	elementfunc("aspect", StartAspect2, EndNone),
-	elementfunc("part", StartPart2, EndNone),
-	elementfunc("regnode", StartRegNode, EndNone),
-	elementfunc("dispname", StartNone, EndDispName),
-	elementfunc("", NULL, NULL)
+	elementfunc(_T("folder"), StartFolder2, EndNone),
+	elementfunc(_T("model"), StartFCO2, EndNone),
+	elementfunc(_T("atom"), StartFCO2, EndNone),
+	elementfunc(_T("connection"), StartFCO2, EndNone),
+	elementfunc(_T("reference"), StartFCO2, EndNone),
+	elementfunc(_T("set"), StartFCO2, EndNone),
+	elementfunc(_T("role"), StartRole2, EndNone),
+	elementfunc(_T("aspect"), StartAspect2, EndNone),
+	elementfunc(_T("part"), StartPart2, EndNone),
+	elementfunc(_T("regnode"), StartRegNode, EndNone),
+	elementfunc(_T("dispname"), StartNone, EndDispName),
+	elementfunc(_T(""), NULL, NULL)
 };
 
 // ------- Element Handlers
@@ -255,14 +255,13 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", metaproject, &IMgaMetaProject::put_Name);
-		Attr(i, "version", metaproject, &IMgaMetaProject::put_Version);
+		Attr(i, _T("name"), metaproject, &IMgaMetaProject::put_Name);
+		Attr(i, _T("version"), metaproject, &IMgaMetaProject::put_Version);
 		
 		/*  New Paradigm GUID logic */	
-		if( i->first == "guid" )
+		if( i->first == _T("guid") )
 		{
-			CComBstrObj bstr;
-			CopyTo(i->second, bstr);
+			_bstr_t bstr = i->second.c_str();
 
 			GUID guid;
 			CopyTo(bstr, guid);
@@ -274,8 +273,8 @@
 			explicitguid = true;
 		}
 
-		Attr(i, "cdate", metaproject, &IMgaMetaProject::put_CreatedAt);
-		Attr(i, "mdate", metaproject, &IMgaMetaProject::put_ModifiedAt);
+		Attr(i, _T("cdate"), metaproject, &IMgaMetaProject::put_CreatedAt);
+		Attr(i, _T("mdate"), metaproject, &IMgaMetaProject::put_ModifiedAt);
 
 		++i;
 	}
@@ -283,7 +282,7 @@
 
 void CMgaMetaParser::EndComment()
 {
-	if( GetPrevName() == "paradigm" )
+	if( GetPrevName() == _T("paradigm") )
 	{
 		COMTHROW( metaproject->put_Comment(PutInBstr(GetCurrData())) );
 	}
@@ -293,7 +292,7 @@
 
 void CMgaMetaParser::EndAuthor()
 {
-	if( GetPrevName() == "paradigm" )
+	if( GetPrevName() == _T("paradigm") )
 	{
 		COMTHROW( metaproject->put_Author(PutInBstr(GetCurrData())) );
 	}
@@ -306,11 +305,11 @@
 	if( GetPrevious().object == NULL )
 		return;
 
-	if( GetPrevName() == "paradigm" )
+	if( GetPrevName() == _T("paradigm") )
 	{
 		COMTHROW( metaproject->put_DisplayedName(PutInBstr(GetCurrData())) );
 	}
-	else if( GetPrevName() == "constraint" )
+	else if( GetPrevName() == _T("constraint") )
 	{
 		CComObjPtr<IMgaMetaConstraint> c;
 		GetPrevObj(c);
@@ -328,7 +327,7 @@
 {
 	CComObjPtr<IMgaMetaFolder> folder;
 
-	if( GetPrevName() == "paradigm" )
+	if( GetPrevName() == _T("paradigm") )
 	{
 		COMTHROW( metaproject->get_RootFolder(PutOut(folder)) );
 	}
@@ -346,8 +345,8 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", folder, &IMgaMetaFolder::put_Name);
-		Attr(i, "metaref", folder, &IMgaMetaFolder::put_MetaRef);
+		Attr(i, _T("name"), folder, &IMgaMetaFolder::put_Name);
+		Attr(i, _T("metaref"), folder, &IMgaMetaFolder::put_MetaRef);
 
 		++i;
 	}
@@ -359,7 +358,7 @@
 
 	CComObjPtr<IMgaMetaFolder> folder;
 
-	if( GetPrevName() == "paradigm" )
+	if( GetPrevName() == _T("paradigm") )
 	{
 		ASSERT( metaproject != NULL );
 		COMTHROW( metaproject->get_RootFolder(PutOut(folder)) );
@@ -369,11 +368,11 @@
 		CComObjPtr<IMgaMetaFolder> prev;
 		GetPrevObj(prev);
 
-		HRESULT hr = prev->get_DefinedFolderByName(PutInBstr(GetByName(attributes, "name")),
+		HRESULT hr = prev->get_DefinedFolderByName(PutInBstr(GetByName(attributes, _T("name"))),
 			VARIANT_FALSE, PutOut(folder));
 
 		if( hr == E_NOTFOUND )
-			ThrowXmlError("Parent folder %s was not found", GetByName(attributes, "name").c_str());
+			ThrowXmlError(_T("Parent folder %s was not found"), GetByName(attributes, _T("name")).c_str());
 		else
 			COMTHROW(hr);
 	}
@@ -385,14 +384,14 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		if( i->first == "subfolders" )
+		if( i->first == _T("subfolders") )
 		{
-			std::string::const_iterator ip = i->second.begin();
-			std::string::const_iterator ep = ip;
-			std::string::const_iterator xp = i->second.end();
+			std::tstring::const_iterator ip = i->second.begin();
+			std::tstring::const_iterator ep = ip;
+			std::tstring::const_iterator xp = i->second.end();
 			for(;;)
 			{
-				std::string token = GetNextToken(ip, ep, xp);
+				std::tstring token = GetNextToken(ip, ep, xp);
 				if( ip == xp )
 					break;
 
@@ -403,21 +402,21 @@
 					VARIANT_TRUE, PutOut(child));
 
 				if( hr == E_NOTFOUND )
-					ThrowXmlError("Defined folder %s was not found", token.c_str());
+					ThrowXmlError(_T("Defined folder %s was not found"), token.c_str());
 				else
 					COMTHROW(hr);
 
 				COMTHROW( folder->AddLegalChildFolder(child) );
 			}
 		}
-		else if( i->first == "rootobjects" )
+		else if( i->first == _T("rootobjects") )
 		{
-			std::string::const_iterator ip = i->second.begin();
-			std::string::const_iterator ep = ip;
-			std::string::const_iterator xp = i->second.end();
+			std::tstring::const_iterator ip = i->second.begin();
+			std::tstring::const_iterator ep = ip;
+			std::tstring::const_iterator xp = i->second.end();
 			for(;;)
 			{
-				std::string token = GetNextToken(ip, ep, xp);
+				std::tstring token = GetNextToken(ip, ep, xp);
 				if( ip == xp )
 					break;
 
@@ -428,7 +427,7 @@
 					VARIANT_TRUE, PutOut(fco));
 
 				if( hr == E_NOTFOUND )
-					ThrowXmlError("No definition for FCO %s was not found", token.c_str());
+                              ThrowXmlError(_T("No definition for FCO %s was not found"), token.c_str());
 				else
 					COMTHROW(hr);
 
@@ -445,7 +444,7 @@
 {
 	CComObjPtr<IMgaMetaAtom> atom;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaMetaFolder> prev;
 		GetPrevObj(prev);
@@ -465,18 +464,18 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", atom, &IMgaMetaAtom::put_Name);
-		Attr(i, "metaref", atom, &IMgaMetaAtom::put_MetaRef);
+		Attr(i, _T("name"), atom, &IMgaMetaAtom::put_Name);
+		Attr(i, _T("metaref"), atom, &IMgaMetaAtom::put_MetaRef);
 		++i;
 	}
-	COMTHROW(atom->put_AliasingEnabled((GetByName(attributes, "aliasenabled") == "yes" ) ? VARIANT_TRUE : VARIANT_FALSE));
+	COMTHROW(atom->put_AliasingEnabled((GetByName(attributes, _T("aliasenabled")) == _T("yes") ) ? VARIANT_TRUE : VARIANT_FALSE));
 }
 
 void CMgaMetaParser::StartConnection(const attributes_type &attributes)
 {
 	CComObjPtr<IMgaMetaConnection> conn;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaMetaFolder> prev;
 		GetPrevObj(prev);
@@ -496,11 +495,11 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", conn, &IMgaMetaConnection::put_Name);
-		Attr(i, "metaref", conn, &IMgaMetaConnection::put_MetaRef);
+		Attr(i, _T("name"), conn, &IMgaMetaConnection::put_Name);
+		Attr(i, _T("metaref"), conn, &IMgaMetaConnection::put_MetaRef);
 		++i;
 	}
-	COMTHROW(conn->put_AliasingEnabled((GetByName(attributes, "aliasenabled") == "yes" ) ? VARIANT_TRUE : VARIANT_FALSE));
+	COMTHROW(conn->put_AliasingEnabled((GetByName(attributes, _T("aliasenabled")) == _T("yes") ) ? VARIANT_TRUE : VARIANT_FALSE));
 }
 
 void CMgaMetaParser::StartConnJoint(const attributes_type &attributes)
@@ -519,13 +518,13 @@
 {
 	CComObjPtr<IMgaMetaPointerSpec> spec;
 
-	if( GetPrevName() == "connjoint" )
+	if( GetPrevName() == _T("connjoint") )
 	{
 		CComObjPtr<IMgaMetaConnJoint> prev;
 		GetPrevObj(prev);
 		COMTHROW( prev->CreatePointerSpec(PutOut(spec)) );
 	}
-	else if( GetPrevName() == "reference" )
+	else if( GetPrevName() == _T("reference") )
 	{
 		CComObjPtr<IMgaMetaReference> prev;
 		GetPrevObj(prev);
@@ -533,7 +532,7 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "set" );
+		ASSERT( GetPrevName() == _T("set") );
 
 		CComObjPtr<IMgaMetaSet> prev;
 		GetPrevObj(prev);
@@ -547,8 +546,8 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		if( i->first == "name" )
-			COMTHROW( spec->put_Name(PutInBstr(i->second)) );
+		if( i->first == _T("name") )
+			COMTHROW( spec->put_Name(PutInBstr(i->second.c_str())) );
 
 		++i;
 	}
@@ -566,7 +565,7 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "desc", item, &IMgaMetaPointerItem::put_Desc);
+		Attr(i, _T("desc"), item, &IMgaMetaPointerItem::put_Desc);
 
 		++i;
 	}
@@ -576,7 +575,7 @@
 {
 	CComObjPtr<IMgaMetaReference> reference;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaMetaFolder> prev;
 		GetPrevObj(prev);
@@ -596,18 +595,18 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", reference, &IMgaMetaReference::put_Name);
-		Attr(i, "metaref", reference, &IMgaMetaReference::put_MetaRef);
+		Attr(i, _T("name"), reference, &IMgaMetaReference::put_Name);
+		Attr(i, _T("metaref"), reference, &IMgaMetaReference::put_MetaRef);
 		++i;
 	}
-	COMTHROW(reference->put_AliasingEnabled((GetByName(attributes, "aliasenabled") == "yes" ) ? VARIANT_TRUE : VARIANT_FALSE));
+	COMTHROW(reference->put_AliasingEnabled((GetByName(attributes, _T("aliasenabled")) == _T("yes") ) ? VARIANT_TRUE : VARIANT_FALSE));
 }
 
 void CMgaMetaParser::StartSet(const attributes_type &attributes)
 {
 	CComObjPtr<IMgaMetaSet> set;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaMetaFolder> prev;
 		GetPrevObj(prev);
@@ -627,19 +626,19 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", set, &IMgaMetaSet::put_Name);
-		Attr(i, "metaref", set, &IMgaMetaSet::put_MetaRef);
+		Attr(i, _T("name"), set, &IMgaMetaSet::put_Name);
+		Attr(i, _T("metaref"), set, &IMgaMetaSet::put_MetaRef);
 
 		++i;
 	}
-	COMTHROW(set->put_AliasingEnabled((GetByName(attributes, "aliasenabled") == "yes" ) ? VARIANT_TRUE : VARIANT_FALSE));
+	COMTHROW(set->put_AliasingEnabled((GetByName(attributes, _T("aliasenabled")) == _T("yes") ) ? VARIANT_TRUE : VARIANT_FALSE));
 }
 
 void CMgaMetaParser::StartModel(const attributes_type &attributes)
 {
 	CComObjPtr<IMgaMetaModel> model;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaMetaFolder> prev;
 		GetPrevObj(prev);
@@ -659,12 +658,12 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", model, &IMgaMetaModel::put_Name);
-		Attr(i, "metaref", model, &IMgaMetaModel::put_MetaRef);
+		Attr(i, _T("name"), model, &IMgaMetaModel::put_Name);
+		Attr(i, _T("metaref"), model, &IMgaMetaModel::put_MetaRef);
 
 		++i;
 	}
-	COMTHROW(model->put_AliasingEnabled((GetByName(attributes, "aliasenabled") == "yes" ) ? VARIANT_TRUE : VARIANT_FALSE));
+	COMTHROW(model->put_AliasingEnabled((GetByName(attributes, _T("aliasenabled")) == _T("yes") ) ? VARIANT_TRUE : VARIANT_FALSE));
 }
 
 void CMgaMetaParser::StartFCO2(const attributes_type &attributes)
@@ -674,23 +673,23 @@
 	CComObjPtr<IMgaMetaFCO> fco;
 	HRESULT hr;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaMetaFolder> prev;
 		GetPrevObj(prev);
-		hr = prev->get_DefinedFCOByName(PutInBstr(GetByName(attributes, "name")),
+		hr = prev->get_DefinedFCOByName(PutInBstr(GetByName(attributes, _T("name"))),
 			VARIANT_FALSE, PutOut(fco));
 	}
 	else
 	{
 		CComObjPtr<IMgaMetaModel> prev;
 		GetPrevObj(prev);
-		hr = prev->get_DefinedFCOByName(PutInBstr(GetByName(attributes, "name")),
+		hr = prev->get_DefinedFCOByName(PutInBstr(GetByName(attributes, _T("name"))),
 			VARIANT_FALSE, PutOut(fco));
 	}
 
 	if( hr == E_NOTFOUND )
-		ThrowXmlError("Parent FCO %s was not found", GetByName(attributes, "name").c_str());
+		ThrowXmlError(_T("Parent FCO %s was not found"), GetByName(attributes, _T("name")).c_str());
 	else
 		COMTHROW(hr);
 
@@ -701,14 +700,14 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		if( i->first == "attributes" )
+		if( i->first == _T("attributes") )
 		{
-			std::string::const_iterator ip = i->second.begin();
-			std::string::const_iterator ep = ip;
-			std::string::const_iterator xp = i->second.end();
+			std::tstring::const_iterator ip = i->second.begin();
+			std::tstring::const_iterator ep = ip;
+			std::tstring::const_iterator xp = i->second.end();
 			for(;;)
 			{
-				std::string token = GetNextToken(ip, ep, xp);
+				std::tstring token = GetNextToken(ip, ep, xp);
 				if( ip == xp )
 					break;
 
@@ -719,7 +718,7 @@
 					VARIANT_TRUE, PutOut(attr));
 
 				if( hr == E_NOTFOUND )
-					ThrowXmlError("Defined attribute %s was not found", token.c_str());
+					ThrowXmlError(_T("Defined attribute %s was not found"), token.c_str());
 				else
 					COMTHROW(hr);
 
@@ -735,7 +734,7 @@
 {
 	CComObjPtr<IMgaMetaAttribute> attr;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaMetaFolder> prev;
 		GetPrevObj(prev);
@@ -757,25 +756,25 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", attr, &IMgaMetaAttribute::put_Name);
-		Attr(i, "defvalue", attr, &IMgaMetaAttribute::put_DefaultValue);
-		Attr(i, "metaref", attr, &IMgaMetaAttribute::put_MetaRef);
+		Attr(i, _T("name"), attr, &IMgaMetaAttribute::put_Name);
+		Attr(i, _T("defvalue"), attr, &IMgaMetaAttribute::put_DefaultValue);
+		Attr(i, _T("metaref"), attr, &IMgaMetaAttribute::put_MetaRef);
 
-		if( i->first == "valuetype" )
+		if( i->first == _T("valuetype") )
 		{
 			attval_enum attval;
 
-			if( i->second == "integer" )
+			if( i->second == _T("integer") )
 				attval = ATTVAL_INTEGER;
-			else if( i->second == "double" )
+			else if( i->second == _T("double") )
 				attval = ATTVAL_DOUBLE;
-			else if( i->second == "boolean" )
+			else if( i->second == _T("boolean") )
 				attval = ATTVAL_BOOLEAN;
-			else if( i->second == "string" )
+			else if( i->second == _T("string") )
 				attval = ATTVAL_STRING;
-			else if( i->second == "enum" )
+			else if( i->second == _T("enum") )
 				attval = ATTVAL_ENUM;
-			else if( i->second == "dynamic" )
+			else if( i->second == _T("dynamic") )
 				attval = ATTVAL_DYNAMIC;
 			else
 				HR_THROW(E_XMLPARSER);
@@ -783,7 +782,7 @@
 			COMTHROW( attr->put_ValueType(attval) );
 		}
 
-		if( i->first == "viewable" && i->second == "no")
+		if( i->first == _T("viewable") && i->second == _T("no"))
 			attr->put_Viewable( VARIANT_FALSE);
 
 		++i;
@@ -802,8 +801,8 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "dispname", item, &IMgaMetaEnumItem::put_DisplayedName);
-		Attr(i, "value", item, &IMgaMetaEnumItem::put_Value);
+		Attr(i, _T("dispname"), item, &IMgaMetaEnumItem::put_DisplayedName);
+		Attr(i, _T("value"), item, &IMgaMetaEnumItem::put_Value);
 
 		++i;
 	}
@@ -815,11 +814,11 @@
 	GetPrevObj(prev);
 
 	CComObjPtr<IMgaMetaFCO> fco;
-	HRESULT hr = prev->get_DefinedFCOByName(PutInBstr(GetByName(attributes, "kind")),
+	HRESULT hr = prev->get_DefinedFCOByName(PutInBstr(GetByName(attributes, _T("kind"))),
 		VARIANT_TRUE, PutOut(fco));
 
 	if( hr == E_NOTFOUND )
-		ThrowXmlError("Kind FCO %s was not found", GetByName(attributes, "kind").c_str());
+		ThrowXmlError(_T("Kind FCO %s was not found"), GetByName(attributes, _T("kind")).c_str());
 	else
 		COMTHROW(hr);
 
@@ -835,8 +834,8 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", role, &IMgaMetaRole::put_Name);
-		Attr(i, "metaref", role, &IMgaMetaRole::put_MetaRef);
+		Attr(i, _T("name"), role, &IMgaMetaRole::put_Name);
+		Attr(i, _T("metaref"), role, &IMgaMetaRole::put_MetaRef);
 
 		++i;
 	}
@@ -860,17 +859,17 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", aspect, &IMgaMetaAspect::put_Name);
-		Attr(i, "metaref", aspect, &IMgaMetaAspect::put_MetaRef);
+		Attr(i, _T("name"), aspect, &IMgaMetaAspect::put_Name);
+		Attr(i, _T("metaref"), aspect, &IMgaMetaAspect::put_MetaRef);
 
-		if( i->first == "attributes" )
+		if( i->first == _T("attributes") )
 		{
-			std::string::const_iterator ip = i->second.begin();
-			std::string::const_iterator ep = ip;
-			std::string::const_iterator xp = i->second.end();
+			std::tstring::const_iterator ip = i->second.begin();
+			std::tstring::const_iterator ep = ip;
+			std::tstring::const_iterator xp = i->second.end();
 			for(;;)
 			{
-				std::string token = GetNextToken(ip, ep, xp);
+				std::tstring token = GetNextToken(ip, ep, xp);
 				if( ip == xp )
 					break;
 
@@ -880,7 +879,7 @@
 				HRESULT hr = model->get_AttributeByName(PutInBstr(token), PutOut(attr));
 
 				if( hr == E_NOTFOUND )
-					ThrowXmlError("Attribute %s was not found", token.c_str());
+					ThrowXmlError(_T("Attribute %s was not found"), token.c_str());
 				else
 					COMTHROW(hr);
 
@@ -900,17 +899,17 @@
 	GetPrevObj(prev);
 
 	ASSERT( elements.size() >= 3 );
-	ASSERT( elements[elements.size()-3].name == "model" );
+	ASSERT( elements[elements.size()-3].name == _T("model") );
 
 	CComObjPtr<IMgaMetaModel> model;
 	COMTHROW( elements[elements.size()-3].object.QueryInterface(model) );
 	ASSERT( model != NULL );
 
 	CComObjPtr<IMgaMetaRole> role;
-	HRESULT hr = model->get_RoleByName(PutInBstr(GetByName(attributes, "role")), PutOut(role));
+	HRESULT hr = model->get_RoleByName(PutInBstr(GetByName(attributes, _T("role"))), PutOut(role));
 
 	if( hr == E_NOTFOUND )
-		ThrowXmlError("Role %s was not found", GetByName(attributes, "role").c_str());
+		ThrowXmlError(_T("Role %s was not found"), GetByName(attributes, _T("role")).c_str());
 	else
 		COMTHROW(hr);
 
@@ -923,16 +922,16 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "kindaspect", part, &IMgaMetaPart::put_KindAspect);
-		Attr(i, "metaref", part, &IMgaMetaPart::put_MetaRef);
+		Attr(i, _T("kindaspect"), part, &IMgaMetaPart::put_KindAspect);
+		Attr(i, _T("metaref"), part, &IMgaMetaPart::put_MetaRef);
 
-		if( i->first == "primary" )
+		if( i->first == _T("primary") )
 		{
-			COMTHROW( part->put_IsPrimary(i->second == "yes" ? VARIANT_TRUE : VARIANT_FALSE) );
+			COMTHROW( part->put_IsPrimary(i->second == _T("yes") ? VARIANT_TRUE : VARIANT_FALSE) );
 		}
-		else if( i->first == "linked" )
+		else if( i->first == _T("linked") )
 		{
-			COMTHROW( part->put_IsLinked(i->second == "yes" ? VARIANT_TRUE : VARIANT_FALSE) );
+			COMTHROW( part->put_IsLinked(i->second == _T("yes") ? VARIANT_TRUE : VARIANT_FALSE) );
 		}
 
 		++i;
@@ -947,15 +946,15 @@
 
 	CComObjPtr<IMgaMetaRegNode> regnode;
 
-	const std::string &name = GetByName(attributes, "name");
+	const std::tstring &name = GetByName(attributes, _T("name"));
 
-	if( GetPrevName() == "part" )
+	if( GetPrevName() == _T("part") )
 	{
 		CComObjPtr<IMgaMetaPart> prev;
 		GetPrevObj(prev);
 		COMTHROW( prev->get_RegistryNode(PutInBstr(name), PutOut(regnode)) );
 	}
-	else if( GetPrevName() == "regnode" )
+	else if( GetPrevName() == _T("regnode") )
 	{
 		CComObjPtr<IMgaMetaRegNode> prev;
 		GetPrevObj(prev);
@@ -975,7 +974,7 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "value", regnode, &IMgaMetaRegNode::put_Value);
+		Attr(i, _T("value"), regnode, &IMgaMetaRegNode::put_Value);
 
 		++i;
 	}
@@ -999,28 +998,28 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		Attr(i, "name", c, &IMgaMetaConstraint::put_Name);
-		Attr(i, "eventmask", c, &IMgaMetaConstraint::put_EventMask);
-		Attr(i, "priority", c, &IMgaMetaConstraint::put_Priority);
-		Attr(i, "defdfornamesp", c, &IMgaMetaConstraint::SetDefinedForNamespace);
+		Attr(i, _T("name"), c, &IMgaMetaConstraint::put_Name);
+		Attr(i, _T("eventmask"), c, &IMgaMetaConstraint::put_EventMask);
+		Attr(i, _T("priority"), c, &IMgaMetaConstraint::put_Priority);
+		Attr(i, _T("defdfornamesp"), c, &IMgaMetaConstraint::SetDefinedForNamespace);
 
-		if( i->first == "depth" )
+		if( i->first == _T("depth") )
 		{
 			constraint_depth_enum depth;
-			if( i->second == "0" )
+			if( i->second == _T("0") )
 				depth = CONSTRAINT_DEPTH_ZERO;
-			else if( i->second == "any" )
+			else if( i->second == _T("any") )
 				depth = CONSTRAINT_DEPTH_ANY;
 			else
 				depth = CONSTRAINT_DEPTH_ONE;
 			COMTHROW( c->put_Depth(depth) );
 		}
-		else if( i->first == "type" )
+		else if( i->first == _T("type") )
 		{
 			constraint_type_enum type;
-			if( i->second == "ondemand" )
+			if( i->second == _T("ondemand") )
 				type = CONSTRAINT_TYPE_ONDEMAND;
-			else if( i->second == "function" )
+			else if( i->second == _T("function") )
 				type = CONSTRAINT_TYPE_FUNCTION;
 			else
 				type = CONSTRAINT_TYPE_EVENTBASED;

Modified: trunk/GME/Parser/MetaParser.h
==============================================================================
--- trunk/GME/Parser/MetaParser.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MetaParser.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -47,8 +47,8 @@
 // ------- Attributes
 
 public:
-	static const std::string GetNextToken(std::string::const_iterator &i, 
-		std::string::const_iterator &e, std::string::const_iterator end);
+	static const std::tstring GetNextToken(std::tstring::const_iterator &i, 
+		std::tstring::const_iterator &e, std::tstring::const_iterator end);
 
 	typedef CGenParserFunc<CMgaMetaParser> elementfunc;
 
@@ -83,8 +83,8 @@
 	void StartEnumItem(const attributes_type &attributes);
 	void StartConstraint(const attributes_type &attributes);
 	void EndConstraint();
-	void fireStartFunction(const std::string& name, const attributes_type& attributes);
-	void fireEndFunction(const std::string& name);
+	void fireStartFunction(const std::tstring& name, const attributes_type& attributes);
+	void fireEndFunction(const std::tstring& name);
 };
 
 #endif//MGA_MgaMetaParser_H

Modified: trunk/GME/Parser/MgaDumper.cpp
==============================================================================
--- trunk/GME/Parser/MgaDumper.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MgaDumper.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -90,13 +90,13 @@
 	if( p == NULL )
 		HR_THROW(E_INVALIDARG);
 
-	std::string filename;
+	std::tstring filename;
 	CopyTo(xmlfile, filename);
 
 	if( filename.empty() )
 		HR_THROW(E_INVALIDARG);
 
-	ofs.init( filename.c_str(), "UTF-8");
+	ofs.init( filename.c_str(), _T("UTF-16"));
 
 	elems.clear();
 
@@ -148,7 +148,7 @@
 	{
 		InitDump(p, xmlfile);
 
-		ofs << "<!DOCTYPE project SYSTEM \"mga.dtd\">\n\n";
+		ofs << L"<!DOCTYPE project SYSTEM \"mga.dtd\">\n\n";
 
 		Dump(p);
 
@@ -195,25 +195,25 @@
 
 		InitDump(project, xmlfile);
 
-		ofs << "<!DOCTYPE clipboard SYSTEM \"mga.dtd\" [\n";
-		ofs << "\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection|regnode)*>\n";
+		ofs << L"<!DOCTYPE clipboard SYSTEM \"mga.dtd\" [\r\n";
+		ofs << L"\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection|regnode)*>\r\n";
 		//ofs << "\t<!ATTLIST clipboard acceptingkind CDATA	#IMPLIED>\n";
 		//ofs << "]>\n\n";
-		ofs << "\t<!ATTLIST clipboard\n";
-		ofs << "\t\tacceptingkind CDATA #IMPLIED\n";
-		ofs << "\t\tparadigmnamehint CDATA #IMPLIED\n";//TODO: could be extended with targetnamespacehint, srcnamespacehint
-		ofs << "\t>\n";
-		ofs << "]>\n\n";
+		ofs << L"\t<!ATTLIST clipboard\r\n";
+		ofs << L"\t\tacceptingkind CDATA #IMPLIED\r\n";
+		ofs << L"\t\tparadigmnamehint CDATA #IMPLIED\r\n";//TODO: could be extended with targetnamespacehint, srcnamespacehint
+		ofs << L"\t>\r\n";
+		ofs << L"]>\r\n\r\n";
 
 
 
-		StartElem("clipboard");
+		StartElem(_T("clipboard"));
 
 		// dumping originating paradigm name as a hint for the parser
 		CComObjPtr<IMgaMetaProject> metaproject;
 		COMTHROW( project->get_RootMeta(PutOut(metaproject)) );
 		ASSERT( metaproject != NULL );
-		if( metaproject) Attr("paradigmnamehint", metaproject, &IMgaMetaProject::get_Name);
+		if( metaproject) Attr(_T("paradigmnamehint"), metaproject, &IMgaMetaProject::get_Name);
 
 		CComObjPtrVector<IMgaFolder>::iterator fi = m_selFolders.begin();
 		while( fi != m_selFolders.end() )
@@ -248,9 +248,9 @@
 
 		if( !m_selRegNodes.empty())
 		{
-			StartElem("regnode");
-			Attr("name", "annotations");
-			StartElem("value");
+			StartElem(_T("regnode"));
+			Attr(_T("name"), _T("annotations"));
+			StartElem(_T("value"));
 			EndElem(); //value
 
 			for( CComObjPtrVector<IMgaRegNode>::iterator ri = m_selRegNodes.begin(); ri != m_selRegNodes.end(); ++ri)
@@ -273,7 +273,7 @@
 		ofs << '\t';
 }
 
-inline void CMgaDumper::StartElem(const char *name)
+inline void CMgaDumper::StartElem(const TCHAR *name)
 {
 	ASSERT( name != NULL );
 
@@ -281,7 +281,7 @@
 	{
 		ASSERT( !elems.back().indata );
 
-		ofs << ">\n";
+		ofs << L">\n";
 		elems.back().inbody = true;
 	}
 
@@ -291,20 +291,20 @@
 	elems.back().indata = false;
 
 	Indent(elems.size()-1);
-	ofs << '<' << name;
+	ofs << L'<' << name;
 }
 
-inline void CMgaDumper::Attr(const char *name, const char *value)
+inline void CMgaDumper::Attr(const TCHAR *name, const TCHAR *value)
 {
 	ASSERT( name != NULL );
 	ASSERT( value != NULL );
 
 	ASSERT( !elems.empty() && !elems.back().inbody );
 	
-	ofs << ' ' << name << "=\"" << Transcoder::StdEscape << value << Transcoder::NoEscape << '"';
+	ofs << L' ' << name << L"=\"" << Transcoder::StdEscape << value << Transcoder::NoEscape << L'"';
 }
 
-inline void CMgaDumper::Attr(const char *name, const char *value, int len)
+inline void CMgaDumper::Attr(const TCHAR *name, const TCHAR *value, int len)
 {
 	ASSERT( name != NULL );
 	ASSERT( value != NULL );
@@ -312,14 +312,14 @@
 
 	ASSERT( !elems.empty() && !elems.back().inbody && !elems.back().indata );
 
-	ofs << ' ' << name << "=\"" << Transcoder::StdEscape << std::string( value, len) << Transcoder::NoEscape << '"';
+	ofs << L' ' << name << L"=\"" << Transcoder::StdEscape << std::tstring( value, len) << Transcoder::NoEscape << L'"';
 }
 
-bool CMgaDumper::HasMarkup(const char *value, int len)
+bool CMgaDumper::HasMarkup(const TCHAR *value, int len)
 {
 	while( --len >= 0 )
 	{
-		char c = *(value++);
+		TCHAR c = *(value++);
 		if( c == '<' || c == '>' || c == '&' || c == '\'' || c == '\"' )
 			return true;
 	}
@@ -327,7 +327,7 @@
 	return false;
 }
 
-inline void CMgaDumper::Data(const char *value, int len)
+inline void CMgaDumper::Data(const TCHAR *value, int len)
 {
 	ASSERT( value != NULL );
 	ASSERT( len >= 0 );
@@ -335,11 +335,11 @@
 
 	if( !elems.back().inbody )
 	{
-		ofs << ">";
+		ofs << L">";
 		elems.back().inbody = true;
 	}
 
-	ofs << Transcoder::StdEscape << std::string( value, len) << Transcoder::NoEscape;
+	ofs << Transcoder::StdEscape << std::tstring( value, len) << Transcoder::NoEscape;
 
 	elems.back().indata = true;
 
@@ -354,11 +354,11 @@
 		if( !elems.back().indata )
 			Indent(elems.size()-1);
 
-		ofs << "</" << elems.back().name << ">\n";
+		ofs << L"</" << elems.back().name << L">\n";
 	}
 	else
 	{
-		ofs << "/>\n";
+		ofs << L"/>\n";
 	}
 
 	elems.pop_back();
@@ -474,16 +474,16 @@
 	CComBstrObj bstr;
 	GUID guid;
 
-	StartElem("project");
+	StartElem(_T("project"));
 
 	COMTHROW( project->get_GUID(PutOut(variant)) );
 	CopyTo(variant, guid);
 	CopyTo(guid, PutOut(bstr));
-	Attr("guid", bstr);
+	Attr(_T("guid"), bstr);
 
-	Attr("cdate", project, &IMgaProject::get_CreateTime);
-	Attr("mdate", project, &IMgaProject::get_ChangeTime);
-	Attr("version", project, &IMgaProject::get_Version);
+	Attr(_T("cdate"), project, &IMgaProject::get_CreateTime);
+	Attr(_T("mdate"), project, &IMgaProject::get_ChangeTime);
+	Attr(_T("version"), project, &IMgaProject::get_Version);
 
 	CComObjPtr<IMgaMetaProject> metaproject;
 	COMTHROW( project->get_RootMeta(PutOut(metaproject)) );
@@ -494,21 +494,21 @@
 	COMTHROW( metaproject->get_GUID(PutOut(variant)) );
 	CopyTo(variant, guid);
 	CopyTo(guid, PutOut(bstr));
-	Attr("metaguid", bstr);
-	Attr("metaversion", metaproject, &IMgaMetaProject::get_Version);
-	Attr("metaname", metaproject, &IMgaMetaProject::get_Name);
+	Attr(_T("metaguid"), bstr);
+	Attr(_T("metaversion"), metaproject, &IMgaMetaProject::get_Version);
+	Attr(_T("metaname"), metaproject, &IMgaMetaProject::get_Name);
 	
 
 
-	StartElem("name");
+	StartElem(_T("name"));
 	Data(project, &IMgaProject::get_Name);
 	EndElem();
 
-	StartElem("comment");
+	StartElem(_T("comment"));
 	Data(project, &IMgaProject::get_Comment);
 	EndElem();
 
-	StartElem("author");
+	StartElem(_T("author"));
 	Data(project, &IMgaProject::get_Author);
 	EndElem();
 
@@ -523,9 +523,9 @@
 {
 	ASSERT( folder != NULL );
 
-	StartElem("folder");
+	StartElem(_T("folder"));
 
-	Attr("id", folder, &IMgaFolder::get_ID);
+	Attr(_T("id"), folder, &IMgaFolder::get_ID);
 
 	if( m_closureDump && m_v2)
 	{
@@ -539,33 +539,33 @@
 			CComBstrObj guid_str;
 			COMTHROW( regnode->get_Value( PutOut(guid_str)));
 			if( guid_str.Length() == GLOBAL_ID_LEN) // using { 8-4-4-4-12} form
-				Attr( "closureguid", guid_str);
+				Attr( _T("closureguid"), guid_str);
 		}
 
 
-		Attr( "closurename", folder, &IMgaFolder::get_Name);
+		Attr( _T("closurename"), folder, &IMgaFolder::get_Name);
 
 	}
 
 	if(dumpversion >= 1) {
 		if( m_dumpRelids)
 		{
-			LAttr("relid", folder, &IMgaFolder::get_RelID);
-			LAttr("childrelidcntr", folder, &IMgaFolder::get_ChildRelIDCounter);
+			LAttr(_T("relid"), folder, &IMgaFolder::get_RelID);
+			LAttr(_T("childrelidcntr"), folder, &IMgaFolder::get_ChildRelIDCounter);
 		}
 
 		CComBstrObj libname;
 		COMTHROW( folder->get_LibraryName(PutOut(libname)) );
-		if(libname) Attr("libref",libname);
+		if(libname) Attr(_T("libref"),libname);
 
 		VARIANT_BOOL readonly;
 		COMTHROW( folder->HasReadOnlyAccess( &readonly));
-		if( readonly) Attr( "perm", "1");
+		if( readonly) Attr( _T("perm"), _T("1"));
 	}
 
 	CComObjPtr<IMgaMetaFolder> metafolder;
 	COMTHROW( folder->get_MetaFolder(PutOut(metafolder)) );
-	Attr("kind", metafolder, &IMgaMetaFolder::get_Name);
+	Attr(_T("kind"), metafolder, &IMgaMetaFolder::get_Name);
 
 	if( m_dumpGuids) // this is true if Project is dumped and mgaversion of project is 2
 	{
@@ -574,14 +574,14 @@
 			CComBstrObj bs;
 			HRESULT hr = folder->GetGuidDisp( PutOut( bs));
 			if( SUCCEEDED( hr) && bs && bs.Length() == 38) // {%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X} <-- dumping that form (38 chars long including braces)
-				Attr( "guid", bs);//Attr( "guid", IMgaObject::GetGuidDisp);
+				Attr( _T("guid"), bs);//Attr( _T("guid"), IMgaObject::GetGuidDisp);
 
 		} catch( hresult_exception& )
 		{
 		}
 	}
 
-	StartElem("name");
+	StartElem(_T("name"));
 	Data(folder, &IMgaFolder::get_Name);
 	EndElem();
 
@@ -613,22 +613,22 @@
 {
 	ASSERT( regnode != NULL );
 
-	StartElem("regnode");
+	StartElem(_T("regnode"));
 
-	Attr("name", regnode, &IMgaRegNode::get_Name);
+	Attr(_T("name"), regnode, &IMgaRegNode::get_Name);
 
 	VARIANT_BOOL b;
 	COMTHROW( regnode->get_Opacity(&b) );
 
 	if( b != VARIANT_FALSE )
-		Attr("isopaque", "yes");
+		Attr(_T("isopaque"), _T("yes"));
 
 	long status;
 	COMTHROW( regnode->get_Status( &status ) );
 	if( status == -2) // ATTSTATUS_UNDEFINED
-		Attr("status", "undefined");
+		Attr(_T("status"), _T("undefined"));
 
-	StartElem("value");
+	StartElem(_T("value"));
 	Data(regnode, &IMgaRegNode::get_Value);
 	EndElem();
 
@@ -728,16 +728,16 @@
 
 	if( dump_attrs )
 	{
-		Attr("id", fco, &IMgaFCO::get_ID);
+		Attr(_T("id"), fco, &IMgaFCO::get_ID);
 
 		CComObjPtr<IMgaMetaFCO> metafco;
 		COMTHROW( fco->get_Meta(PutOut(metafco)) );
-		Attr("kind", metafco, &IMgaMetaFCO::get_Name);
+		Attr(_T("kind"), metafco, &IMgaMetaFCO::get_Name);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( fco->get_MetaRole(PutOut(role)) );
 		if( role != NULL )
-			Attr("role", role, &IMgaMetaRole::get_Name);
+			Attr(_T("role"), role, &IMgaMetaRole::get_Name);
 
 		if( m_dumpGuids) // this is true if Project is dumped and mgaversion of project is 2
 		{
@@ -746,7 +746,7 @@
 				CComBstrObj bs;
 				HRESULT hr = fco->GetGuidDisp( PutOut( bs));
 				if( SUCCEEDED( hr) && bs && bs.Length() == 38) // {%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X} <-- dumping that form (38 chars long including braces)
-					Attr( "guid", bs);//Attr( "guid", IMgaFCO::GetGuidDisp);
+					Attr( _T("guid"), bs);//Attr( _T("guid"), IMgaFCO::GetGuidDisp);
 
 			} catch( hresult_exception& )
 			{
@@ -759,9 +759,9 @@
 			CComBstrObj guid_str; // this form will not create the node if is not present
 			COMTHROW( fco->get_RegistryValue( CComBSTR( GLOBAL_ID_STR), PutOut( guid_str)));
 			if( guid_str != 0 && guid_str.Length() == GLOBAL_ID_LEN) // using { 8-4-4-4-12} form
-				Attr( "closureguid", guid_str);
+				Attr( _T("closureguid"), guid_str);
 
-			Attr( "closurename", fco, &IMgaFCO::get_Name);
+			Attr( _T("closurename"), fco, &IMgaFCO::get_Name);
 
 		}
 
@@ -772,15 +772,15 @@
 		if(derivedfrom != NULL )
 		{
 			if (CheckInClosure(derivedfrom)) {
-				Attr("derivedfrom", derivedfrom, &IMgaFCO::get_ID);
+				Attr(_T("derivedfrom"), derivedfrom, &IMgaFCO::get_ID);
 
 				VARIANT_BOOL b;
 
 				COMTHROW( fco->get_IsInstance(&b) );
-				Attr("isinstance", b != VARIANT_FALSE ? "yes" : "no");
+				Attr(_T("isinstance"), b != VARIANT_FALSE ? _T("yes") : _T("no"));
 
 				COMTHROW( fco->get_IsPrimaryDerived(&prim) );
-				Attr("isprimary", prim != VARIANT_FALSE ? "yes" : "no");
+				Attr(_T("isprimary"), prim != VARIANT_FALSE ? _T("yes") : _T("no"));
 			}
 			else {
 				lost_basetype = true;
@@ -791,40 +791,40 @@
 				if ( m_dumpLibraryStubs && !CheckInClosure(derivedfrom) && !isInLibrary( fco) && isInLibrary( derivedfrom)) { //derived from a type defined in a library
 					CComBSTR name;
 					COMTHROW( derivedfrom->get_AbsPath( &name));
-					std::string nm;
+					std::tstring nm;
 					CopyTo( name, nm);
 					
-					Attr("closurelibderivedfrom", nm);
+					Attr(_T("closurelibderivedfrom"), nm);
 
 					VARIANT_BOOL b;
 
 					COMTHROW( fco->get_IsInstance(&b) );
-					Attr("isinstance", b != VARIANT_FALSE ? "yes" : "no");
+					Attr(_T("isinstance"), b != VARIANT_FALSE ? _T("yes") : _T("no"));
 
 					COMTHROW( fco->get_IsPrimaryDerived(&prim) );
-					Attr("isprimary", prim != VARIANT_FALSE ? "yes" : "no");
+					Attr(_T("isprimary"), prim != VARIANT_FALSE ? _T("yes") : _T("no"));
 				}
 				else if( m_v2)
 				{
 					CComBSTR name;
 
 					COMTHROW( derivedfrom->get_AbsPath( &name));
-					std::string nm;
+					std::tstring nm;
 					CopyTo( name, nm);
 					
 					COMTHROW( fco->get_AbsPath( &name));
-					std::string nm2;
+					std::tstring nm2;
 					CopyTo( name, nm2);
 
-					Attr("closure2derivedfrom", makeRel( nm, nm2));
+					Attr(_T("closure2derivedfrom"), makeRel( nm, nm2));
 
 					VARIANT_BOOL b;
 
 					COMTHROW( fco->get_IsInstance(&b) );
-					Attr("isinstance", b != VARIANT_FALSE ? "yes" : "no");
+					Attr(_T("isinstance"), b != VARIANT_FALSE ? _T("yes") : _T("no"));
 
 					COMTHROW( fco->get_IsPrimaryDerived(&prim) );
-					Attr("isprimary", prim != VARIANT_FALSE ? "yes" : "no");
+					Attr(_T("isprimary"), prim != VARIANT_FALSE ? _T("yes") : _T("no"));
 				}
 			}
 
@@ -833,20 +833,20 @@
 				CComBstrObj guid;
 				COMTHROW( derivedfrom->get_RegistryValue( CComBSTR( GLOBAL_ID_STR), PutOut( guid)));
 				if( guid != 0 && guid.Length() == GLOBAL_ID_LEN)
-					Attr( "smartDerivedFromGUID", guid);
+					Attr( _T("smartDerivedFromGUID"), guid);
 			}
 		}
 		if(prim && (dumpversion >= 1) && (!lost_basetype) && m_dumpRelids)
-			LAttr("relid", fco, &IMgaFCO::get_RelID);
+			LAttr(_T("relid"), fco, &IMgaFCO::get_RelID);
 
 		VARIANT_BOOL readonly;
 		COMTHROW( fco->HasReadOnlyAccess( &readonly));
-		if( readonly) Attr( "perm", "1");
+		if( readonly) Attr( _T("perm"), _T("1"));
 	}
 
 	if( dump_name )
 	{
-		StartElem("name");
+		StartElem(_T("name"));
 		Data(fco, &IMgaFCO::get_Name);
 		EndElem();
 	}
@@ -878,10 +878,10 @@
 {
 	ASSERT( model != NULL );
 
-	StartElem("model");
+	StartElem(_T("model"));
 
 	DumpFCO(model, true, false, false);	
-	if(dumpversion >= 1 && m_dumpRelids) LAttr("childrelidcntr", model, &IMgaModel::get_ChildRelIDCounter);
+	if(dumpversion >= 1 && m_dumpRelids) LAttr(_T("childrelidcntr"), model, &IMgaModel::get_ChildRelIDCounter);
 	DumpFCO(model, false, true, true);	
 
 	Dump(model, &IMgaModel::get_ChildFCOs);
@@ -921,13 +921,13 @@
 {
 	ASSERT( constraint != NULL );
 
-	StartElem("constraint");
+	StartElem(_T("constraint"));
 
-	StartElem("name");
+	StartElem(_T("name"));
 	Data(constraint, &IMgaConstraint::get_Name);
 	EndElem();
 
-	StartElem("value");
+	StartElem(_T("value"));
 	Data(constraint, &IMgaConstraint::get_Expression);
 	EndElem();
 
@@ -938,25 +938,25 @@
 {
 	ASSERT( attribute != NULL );
 
-	StartElem("attribute");
+	StartElem(_T("attribute"));
 	
 	CComObjPtr<IMgaMetaAttribute> metaattr;
 	COMTHROW( attribute->get_Meta(PutOut(metaattr)) );
-	Attr("kind", metaattr, &IMgaMetaAttribute::get_Name);
+	Attr(_T("kind"), metaattr, &IMgaMetaAttribute::get_Name);
 
 	long status;
 	COMTHROW( attribute->get_Status(&status) );
 	if( status < 0 )
-		Attr("status", "meta");
+		Attr(_T("status"), _T("meta"));
 	else if( status > 0 )
-		Attr("status", "inherited");
+		Attr(_T("status"), _T("inherited"));
 
-	StartElem("value");
+	StartElem(_T("value"));
 
 	attval_enum attval;
 	COMTHROW( metaattr->get_ValueType(&attval) );
 
-	std::string data;
+	std::tstring data;
 
 	switch(attval)
 	{
@@ -974,7 +974,7 @@
 		{
 			long l;
 			COMTHROW( attribute->get_IntValue(&l) );
-			Format(data, "%ld", l);
+			Format(data, _T("%ld"), l);
 			break;
 		}
 
@@ -982,7 +982,7 @@
 		{
 			double d;
 			COMTHROW( attribute->get_FloatValue(&d) );
-			Format(data, "%g", d);
+			Format(data, _T("%g"), d);
 			break;
 		}
 
@@ -992,9 +992,9 @@
 			COMTHROW( attribute->get_BoolValue(&b) );
 
 			if( b != VARIANT_FALSE )
-				data = "true";
+				data = _T("true");
 			else
-				data = "false";
+				data = _T("false");
 
 			break;
 		}
@@ -1029,7 +1029,7 @@
 {
 	ASSERT( atom != NULL );
 
-	StartElem("atom");
+	StartElem(_T("atom"));
 
 	DumpFCO(atom);
 
@@ -1040,7 +1040,7 @@
 {
 	ASSERT( reference != NULL );
 
-	StartElem("reference");
+	StartElem(_T("reference"));
 
 	DumpFCO(reference, true, false, false);
 
@@ -1050,7 +1050,7 @@
 	if( fco != NULL)
 	{
 		if( CheckInClosure( fco)) // regular dump or the fco is really in the closure
-			Attr("referred", fco, &IMgaFCO::get_ID);
+			Attr(_T("referred"), fco, &IMgaFCO::get_ID);
 		
 		if( m_closureDump)
 		{
@@ -1058,26 +1058,26 @@
 			{
 				CComBSTR name;
 				COMTHROW( fco->get_AbsPath( &name));
-				std::string nm;
+				std::tstring nm;
 				CopyTo( name, nm);
 				
-				Attr("closurelibreferred", nm);
+				Attr(_T("closurelibreferred"), nm);
 			}
 
 			// dump the relativepath of the referred object if v2
-			else if( m_v2) // "else" introd freshly, not to dump to paths, the parser will check first for closurelibreferred
+			else if( m_v2) // _T("else") introd freshly, not to dump to paths, the parser will check first for closurelibreferred
 			{
 				CComBSTR name;
 				COMTHROW( fco->get_AbsPath( &name));
-				std::string nm;
+				std::tstring nm;
 				CopyTo( name, nm);
 
 				COMTHROW( reference->get_AbsPath( &name));
-				std::string nm2;
+				std::tstring nm2;
 				CopyTo( name, nm2);
 
 				
-				Attr("closure2referred", makeRel( nm, nm2));
+				Attr(_T("closure2referred"), makeRel( nm, nm2));
 			}
 
 			// dump guid of fco if m_v2
@@ -1086,7 +1086,7 @@
 				CComBstrObj ref_guid;
 				COMTHROW( fco->get_RegistryValue( CComBSTR( GLOBAL_ID_STR), PutOut( ref_guid)));
 				if( ref_guid != 0 && ref_guid.Length() == GLOBAL_ID_LEN) // valid guid
-					Attr( "smartReferredGUID", ref_guid);
+					Attr( _T("smartReferredGUID"), ref_guid);
 			}
 		}
 	}
@@ -1099,7 +1099,7 @@
 		short stat;
 		COMTHROW( reference->CompareToBase(&stat));
 		if(!stat) {
-			Attr("isbound", "yes" );
+			Attr(_T("isbound"), _T("yes") );
 		}
 	}
 
@@ -1112,7 +1112,7 @@
 {
 	ASSERT( connection != NULL );
 
-	StartElem("connection");
+	StartElem(_T("connection"));
 
 	bool skipdump = false;
 
@@ -1123,7 +1123,7 @@
 		short stat;
 		COMTHROW( connection->CompareToBase(NULL, &stat));
 		if(!stat) {
-			Attr("isbound", "yes" );
+			Attr(_T("isbound"), _T("yes") );
 			skipdump = true;
 		}
 	}
@@ -1142,7 +1142,7 @@
 {
 	ASSERT( set != NULL );
 
-	StartElem("set");
+	StartElem(_T("set"));
 
 	DumpFCO(set, true, false, false);
 	bool skipdump = false;
@@ -1153,7 +1153,7 @@
 		short stat;
 		COMTHROW( set->CompareToBase(&stat));
 		if(!stat) {
-			Attr("isbound", "yes" );
+			Attr(_T("isbound"), _T("yes") );
 			skipdump = true;
 		}
 	}
@@ -1172,12 +1172,12 @@
 
 			if( m_v2)
 			{
-				std::string memberguids = DumpMixedGUIDRefs( members); // uses m_currAbsPath
-				if( !memberguids.empty()) Attr( "smartMemberGUIDs", memberguids);
+				std::tstring memberguids = DumpMixedGUIDRefs( members); // uses m_currAbsPath
+				if( !memberguids.empty()) Attr( _T("smartMemberGUIDs"), memberguids);
 			}
 		}
 
-		DumpIDRefs("members", members); // might use m_currAbsPath
+		DumpIDRefs(_T("members"), members); // might use m_currAbsPath
 	}
 
 	DumpFCO(set, false, true, true);
@@ -1189,9 +1189,9 @@
 {
 	ASSERT( connpoint != NULL );
 
-	StartElem("connpoint");
+	StartElem(_T("connpoint"));
 
-	Attr("role", connpoint, &IMgaConnPoint::get_ConnRole);
+	Attr(_T("role"), connpoint, &IMgaConnPoint::get_ConnRole);
 	
 	CComObjPtr<IMgaFCO> target;
 	COMTHROW( connpoint->get_Target(PutOut(target)) );
@@ -1210,11 +1210,11 @@
 		short stat;
 		COMTHROW( conn->CompareToBase(connpoint, &stat));
 		if(!stat) {
-			Attr("isbound", "yes" );
+			Attr(_T("isbound"), _T("yes") );
 		}
 	}
 
-	Attr("target", target, &IMgaFCO::get_ID);
+	Attr(_T("target"), target, &IMgaFCO::get_ID);
 
 	if( m_closureDump)
 	{
@@ -1227,19 +1227,19 @@
 		{
 			CComBSTR name;
 			COMTHROW( target->get_AbsPath( &name));
-			std::string nm;
+			std::tstring nm;
 			CopyTo( name, nm);
 			
-			Attr("closurelibtarget", nm);
+			Attr(_T("closurelibtarget"), nm);
 		}
 		else if( m_v2) // closure v2
 		{
 			CComBSTR name;
 			COMTHROW( target->get_AbsPath( &name));
-			std::string nm;
+			std::tstring nm;
 			CopyTo( name, nm);
 
-			Attr("closure2target", makeRel( nm, m_currAbsPath));
+			Attr(_T("closure2target"), makeRel( nm, m_currAbsPath));
 		} 
 	}
 
@@ -1247,16 +1247,16 @@
 	CComObjPtrVector<IMgaFCO> refs;
 	COMTHROW( connpoint->get_References(PutOut(refs)) );
 	// m_currAbsPath is set above, at the "closure2target" dump
-	DumpIDRefs("refs", refs);
+	DumpIDRefs(_T("refs"), refs);
 
 	EndElem();
 }
 
-void CMgaDumper::DumpIDRefs(const char *name, CComObjPtrVector<IMgaFCO> &fcos)
+void CMgaDumper::DumpIDRefs(const TCHAR *name, CComObjPtrVector<IMgaFCO> &fcos)
 {
 	if( !fcos.empty() )
 	{
-		std::string idrefs, clos_idrefs;
+		std::tstring idrefs, clos_idrefs;
 
 		CComObjPtrVector<IMgaFCO>::iterator i = fcos.begin();
 		CComObjPtrVector<IMgaFCO>::iterator e = fcos.end();
@@ -1266,7 +1266,7 @@
 			{
 				CComBSTR name;
 				COMTHROW( (*i)->get_AbsPath( &name));
-				std::string nm;
+				std::tstring nm;
 				CopyTo( name, nm);
 
 				if( !clos_idrefs.empty() )
@@ -1282,7 +1282,7 @@
 			CComBstrObj bstr;
 			COMTHROW( (*i)->get_ID(PutOut(bstr)) );
 
-			std::string id;
+			std::tstring id;
 			CopyTo(bstr, id);
 
 			if( !idrefs.empty() )
@@ -1298,14 +1298,14 @@
 
 		if( m_closureDump && m_v2 && !clos_idrefs.empty()) // closure v2
 		{
-			std::string clos_name("closure2"); clos_name += name;
+			std::tstring clos_name(_T("closure2")); clos_name += name;
 			Attr( clos_name.c_str(), clos_idrefs);
 		}
 	}
 }
-std::string CMgaDumper::DumpGUIDRefs( CComObjPtrVector<IMgaFCO>& fcos)
+std::tstring CMgaDumper::DumpGUIDRefs( CComObjPtrVector<IMgaFCO>& fcos)
 {
-	std::string guidrefs;
+	std::tstring guidrefs;
 
 	for( CComObjPtrVector<IMgaFCO>::iterator i = fcos.begin(); i != fcos.end(); ++i)
 	{
@@ -1314,7 +1314,7 @@
 
 		if( bstr != 0 && bstr.Length() == GLOBAL_ID_LEN)
 		{
-			std::string guid;
+			std::tstring guid;
 			CopyTo(bstr, guid);
 
 			if( !guidrefs.empty() )
@@ -1323,24 +1323,24 @@
 			guidrefs += guid;
 		}
 		else
-			return ""; // if one guid not found, then all are disregarded
+			return _T(""); // if one guid not found, then all are disregarded
 	}
 
 	return guidrefs;
 }
 
-std::string CMgaDumper::DumpMixedGUIDRefs( CComObjPtrVector<IMgaFCO>& fcos)
+std::tstring CMgaDumper::DumpMixedGUIDRefs( CComObjPtrVector<IMgaFCO>& fcos)
 {
 	// this method produces a sequence of the {guid}=path forms
 	//{E200BEEB-34BC-4271-A134-AA5728C38124}\\/@../@module_ref1|kind=module_ref|relpos=0
-	std::string guidrefs;
+	std::tstring guidrefs;
 
 	for( CComObjPtrVector<IMgaFCO>::iterator i = fcos.begin(); i != fcos.end(); ++i)
 	{
 
 		CComBSTR name;
 		COMTHROW( (*i)->get_AbsPath( &name));
-		std::string nm;
+		std::tstring nm;
 		CopyTo( name, nm);
 
 		if( !guidrefs.empty() )
@@ -1351,7 +1351,7 @@
 
 		if( bstr != 0 && bstr.Length() == GLOBAL_ID_LEN)
 		{
-			std::string guid;
+			std::tstring guid;
 			CopyTo(bstr, guid);
 
 
@@ -1375,12 +1375,12 @@
 	//small speed up, build a vector of strings first, then sort the strings
 	//while doing the sort operations on the original vector, so we don't have
 	//to call the get_Name function each time we look at a RegNode
-	std::vector<std::string> vPrime;
+	std::vector<std::tstring> vPrime;
 	for (int i=0; i<n; i++)
 	{
 		CComBSTR bstr;
 		COMTHROW((*v)[i]->get_Name(&bstr));
-		std::string s;
+		std::tstring s;
 		CopyTo(bstr,s);
 		vPrime.push_back(s);
 	}
@@ -1388,7 +1388,7 @@
 	//in place insertion sort
 	for (int x=1; x<n; x++) 
 	{
-		std::string index = vPrime[x];
+		std::tstring index = vPrime[x];
 		CComObjPtr<IMgaRegNode> indexRegNode = (*v)[x];
 		int y = x;
 
@@ -1415,14 +1415,14 @@
 	//small speed up, build a vector of strings first, then sort the strings
 	//while doing the sort operations on the original vector, so we don't have
 	//to get the Kind Name every time
-	std::vector<std::string> vPrime;
+	std::vector<std::tstring> vPrime;
 	for (int i=0; i<n; i++)
 	{
 		CComBSTR bstr;
 		CComPtr<IMgaMetaAttribute> meta;
 		COMTHROW((*v)[i]->get_Meta(&meta));
 		COMTHROW(meta->get_Name(&bstr));
-		std::string s;
+		std::tstring s;
 		CopyTo(bstr,s);
 		vPrime.push_back(s);
 	}
@@ -1430,7 +1430,7 @@
 	//in place insertion sort
 	for (int x=1; x<n; x++) 
 	{
-		std::string index = vPrime[x];
+		std::tstring index = vPrime[x];
 		CComObjPtr<IMgaAttribute> indexAttr = (*v)[x];
 		int y = x;
 
@@ -1456,14 +1456,14 @@
 	//small speed up, build a vector of strings first, then sort the strings
 	//while doing the sort operations on the original vector, so we don't have
 	//to get the Target ID every time
-	std::vector<std::string> vPrime;
+	std::vector<std::tstring> vPrime;
 	for (int i=0; i<n; i++)
 	{
 		CComBSTR bstr;
 		CComPtr<IMgaFCO> fco;
 		COMTHROW((*v)[i]->get_Target(&fco));
 		COMTHROW(fco->get_ID(&bstr));
-		std::string s;
+		std::tstring s;
 		CopyTo(bstr,s);
 		vPrime.push_back(s);
 	}
@@ -1471,7 +1471,7 @@
 	//in place insertion sort
 	for (int x=1; x<n; x++) 
 	{
-		std::string index = vPrime[x];
+		std::tstring index = vPrime[x];
 		CComObjPtr<IMgaConnPoint> indexConnPoint = (*v)[x];
 		int y = x;
 
@@ -1497,12 +1497,12 @@
 	//small speed up, build a vector of strings first, then sort the strings
 	//while doing the sort operations on the original vector, so we don't have
 	//to call the get_ID function each time we look at a Folder
-	std::vector<std::string> vPrime;
+	std::vector<std::tstring> vPrime;
 	for (int i=0; i<n; i++)
 	{
 		CComBSTR bstr;
 		COMTHROW((*v)[i]->get_ID(&bstr));
-		std::string s;
+		std::tstring s;
 		CopyTo(bstr,s);
 		vPrime.push_back(s);
 	}	
@@ -1510,7 +1510,7 @@
 	//in place insertion sort
 	for (int x=1; x<n; x++) 
 	{
-		std::string index = vPrime[x];
+		std::tstring index = vPrime[x];
 		CComObjPtr<IMgaFolder> indexFolder = (*v)[x];
 		int y = x;
 
@@ -1537,12 +1537,12 @@
 	//small speed up, build a vector of strings first, then sort the strings
 	//while doing the sort operations on the original vector, so we don't have
 	//to call the get_ID function each time we look at an FCO
-	std::vector<std::string> vPrime;
+	std::vector<std::tstring> vPrime;
 	for (int i=0; i<n; i++)
 	{
 		CComBSTR bstr;
 		COMTHROW((*v)[i]->get_ID(&bstr));
-		std::string s;
+		std::tstring s;
 		CopyTo(bstr,s);
 		vPrime.push_back(s);
 	}
@@ -1550,7 +1550,7 @@
 	//in place insertion sort
 	for (int x=1; x<n; x++) 
 	{
-		std::string index = vPrime[x];
+		std::tstring index = vPrime[x];
 		CComObjPtr<IMgaFCO> indexFCO = (*v)[x];
 		int y = x;
 
@@ -1727,23 +1727,23 @@
 		
 		if ( false) // clipboard format
 		{
-			ofs << "<!DOCTYPE clipboard SYSTEM \"mgaclosure.dtd\" [\n";
-			ofs << "\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection|regnode)*>\n";
-			ofs << "\t<!ATTLIST clipboard\n";
-			ofs << "\t\tclosureversion CDATA #IMPLIED\n";
-			ofs << "\t\tacceptingkind CDATA #IMPLIED\n";
-			ofs << "\t\tparadigmnamehint CDATA #IMPLIED\n"; // just for compatibility with raw copied data
-			ofs << "\t>\n";
-			ofs << "]>\n\n";
+			ofs << L"<!DOCTYPE clipboard SYSTEM \"mgaclosure.dtd\" [\n";
+			ofs << L"\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection|regnode)*>\n";
+			ofs << L"\t<!ATTLIST clipboard\n";
+			ofs << L"\t\tclosureversion CDATA #IMPLIED\n";
+			ofs << L"\t\tacceptingkind CDATA #IMPLIED\n";
+			ofs << L"\t\tparadigmnamehint CDATA #IMPLIED\n"; // just for compatibility with raw copied data
+			ofs << L"\t>\n";
+			ofs << L"]>\n\n";
 
-			StartElem("clipboard");
-			Attr("closureversion", "1");
+			StartElem(_T("clipboard"));
+			Attr(_T("closureversion"), _T("1"));
 			Dump( project); 
 			EndElem();
 		}
 		else
 		{
-			ofs << "<!DOCTYPE project SYSTEM \"mgaclosure.dtd\">\n\n";
+			ofs << L"<!DOCTYPE project SYSTEM \"mgaclosure.dtd\">\n\n";
 
 			Dump( project); 
 		}
@@ -1767,11 +1767,11 @@
 	m_dumpLibraryStubs	= (dump_options & 0x1) == 0x1; // dump library stubs ( absolute path used as closurelibreferred, closurelibderivedfrom, closurelibtarget attribute)
 	m_v2				= (dump_options & 0x2) == 0x2; // dump the closure2members, closure2refs like attributes
 
-	std::string version_string;
+	std::tstring version_string;
 	if( dump_options & 0x4)
-		version_string = "4";
+		version_string = _T("4");
 	else
-		version_string = "1";
+		version_string = _T("1");
 	
 	//CopyTo( abspath, m_currParAbsPath);
 
@@ -1815,18 +1815,18 @@
 		putInTerritory( m_selFolders);
 		putInTerritory( parentless_folders);
 
-		ofs << "<!DOCTYPE clipboard SYSTEM \"mgaclosure.dtd\" [\n";
-		ofs << "\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection|regnode)*>\n";
-		ofs << "\t<!ATTLIST clipboard\n";
-		ofs << "\t\tclosureversion CDATA #IMPLIED\n";
-		ofs << "\t\tacceptingkind CDATA #IMPLIED\n";
-		ofs << "\t\tparadigmnamehint CDATA #IMPLIED\n"; // just for compatibility with raw copied data
-		ofs << "\t>\n";
-		ofs << "]>\n\n";
-
-		StartElem("clipboard");
-		Attr("closureversion", version_string);
-		Attr("acceptingkind", CComBstrObj( acceptingkinds));
+		ofs << L"<!DOCTYPE clipboard SYSTEM \"mgaclosure.dtd\" [\n";
+		ofs << L"\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection|regnode)*>\n";
+		ofs << L"\t<!ATTLIST clipboard\n";
+		ofs << L"\t\tclosureversion CDATA #IMPLIED\n";
+		ofs << L"\t\tacceptingkind CDATA #IMPLIED\n";
+		ofs << L"\t\tparadigmnamehint CDATA #IMPLIED\n"; // just for compatibility with raw copied data
+		ofs << L"\t>\n";
+		ofs << L"]>\n\n";
+
+		StartElem(_T("clipboard"));
+		Attr(_T("closureversion"), version_string);
+		Attr(_T("acceptingkind"), CComBstrObj( acceptingkinds));
 
 		for( CComObjPtrVector<IMgaFolder>::iterator j = parentless_folders.begin(); j != parentless_folders.end(); ++j )
 		{
@@ -1879,14 +1879,14 @@
 
 void CMgaDumper::DumpConnDetails( CComObjPtr<IMgaConnection> connection)
 {
-	const char * role_attr []       = { "smart0Role="         , "smart1Role="         };
-	const char * targetGUID_attr [] = { "smart0TargetGUID="   , "smart1TargetGUID="   };
-	const char * target_attr []     = { "smart0Target="       , "smart1Target="       };
-	const char * refchainGUID_attr[]= { "smart0RefChainGUID=" , "smart1RefChainGUID=" };
-	const char * refchain_attr []   = { "smart0RefChain="     , "smart1RefChain="     };
-	const char * isbound_attr []    = { "smart0IsBound="      , "smart1IsBound="      };
+	const TCHAR * role_attr []       = { _T("smart0Role=")         , _T("smart1Role=")         };
+	const TCHAR * targetGUID_attr [] = { _T("smart0TargetGUID=")   , _T("smart1TargetGUID=")   };
+	const TCHAR * target_attr []     = { _T("smart0Target=")       , _T("smart1Target=")       };
+	const TCHAR * refchainGUID_attr[]= { _T("smart0RefChainGUID=") , _T("smart1RefChainGUID=") };
+	const TCHAR * refchain_attr []   = { _T("smart0RefChain=")     , _T("smart1RefChain=")     };
+	const TCHAR * isbound_attr []    = { _T("smart0IsBound=")      , _T("smart1IsBound=")      };
 
-	std::string array[2]; // { source_info, destin_info };
+	std::tstring array[2]; // { source_info, destin_info };
 	CComObjPtrVector<IMgaConnPoint> cps;
 	COMTHROW( connection->get_ConnPoints( PutOut( cps)));
 
@@ -1894,13 +1894,13 @@
 	{
 		for( unsigned int i = 0; i < cps.size(); ++i)
 		{
-			CComBSTR role_bstr;std::string role_str;
+			CComBSTR role_bstr;std::tstring role_str;
 			COMTHROW( cps[i]->get_ConnRole( &role_bstr));
 			int w = 0; // which?
-			if( role_bstr == CComBSTR("dst")) w = 1; // otherwise will fill arr[0]
+			if( role_bstr == CComBSTR(L"dst")) w = 1; // otherwise will fill arr[0]
 			CopyTo( role_bstr, role_str);
 			
-			array[w] += std::string( role_attr[w]) + "\"" + role_str + "\" ";
+			array[w] += std::tstring( role_attr[w]) + _T("\"") + role_str + _T("\" ");
 
 			CComObjPtr<IMgaFCO> target;
 			COMTHROW( cps[i]->get_Target(PutOut(target)) );
@@ -1912,8 +1912,8 @@
 			COMTHROW( target->get_RegistryValue( CComBSTR(GLOBAL_ID_STR), &guid));
 			if( guid != 0 && guid.Length() == GLOBAL_ID_LEN) // valid
 			{
-				std::string guid_str; CopyTo( guid, guid_str);
-				array[w] += std::string( targetGUID_attr[w]) + "\"" + guid_str + "\" ";
+				std::tstring guid_str; CopyTo( guid, guid_str);
+				array[w] += std::tstring( targetGUID_attr[w]) + _T("\"") + guid_str + _T("\" ");
 			}
 
 			CComBSTR nameBstr;
@@ -1921,41 +1921,41 @@
 			CopyTo( nameBstr, m_currAbsPath); // will be used by the DumpConnPoint also
 				
 			nameBstr.Empty(); 
-			std::string t_name;
+			std::tstring t_name;
 			COMTHROW( target->get_AbsPath( &nameBstr));
 			CopyTo( nameBstr, t_name);
 
 			//Attr("closure2target", makeRel( t_name, m_currAbsPath));
-			std::string relpath_to_end = makeRel( t_name, m_currAbsPath);
-			ASSERT( relpath_to_end.substr(0, 4) == "/@..");
+			std::tstring relpath_to_end = makeRel( t_name, m_currAbsPath);
+			ASSERT( relpath_to_end.substr(0, 4) == _T("/@.."));
 			// the path to connection end is calculated relative to the connection
 			// so if we cut off the first node, then it will be relative to the container
-			array[w] += std::string( target_attr[w]) + "\"" + relpath_to_end.substr(4) + "\" ";
+			array[w] += std::tstring( target_attr[w]) + _T("\"") + relpath_to_end.substr(4) + _T("\" ");
 
 			CComObjPtrVector<IMgaFCO> refs;
 			COMTHROW( cps[i]->get_References(PutOut(refs)) );
 
-			std::string guidrefs = DumpGUIDRefs( refs);
-			if( !guidrefs.empty()) array[w] += std::string( refchainGUID_attr[w]) + "\"" + guidrefs + "\" ";
+			std::tstring guidrefs = DumpGUIDRefs( refs);
+			if( !guidrefs.empty()) array[w] += std::tstring( refchainGUID_attr[w]) + _T("\"") + guidrefs + _T("\" ");
 
-			std::string chain;
+			std::tstring chain;
 			for( CComObjPtrVector<IMgaFCO>::iterator j = refs.begin(); j != refs.end(); ++j)
 			{
 				CComBSTR name;
 				COMTHROW( (*j)->get_AbsPath( &name));
-				std::string nm;
+				std::tstring nm;
 				CopyTo( name, nm);
 
 				if( !chain.empty() )
 					chain += ' ';
 
-				std::string rel_path_to = makeRel( nm, m_currAbsPath);
-				ASSERT( rel_path_to.substr( 0, 4) == "/@..");
+				std::tstring rel_path_to = makeRel( nm, m_currAbsPath);
+				ASSERT( rel_path_to.substr( 0, 4) == _T("/@.."));
 				// rel path converted from relative to the m_currAbsPath to relative to the container
 				chain += rel_path_to.substr(4);
 			}
 
-			array[w] += std::string( refchain_attr[w]) + "\"" + chain + "\" ";
+			array[w] += std::tstring( refchain_attr[w]) + _T("\"") + chain + _T("\" ");
 			
 			CComObjPtr<IMgaFCO> base;
 			COMTHROW( connection->get_DerivedFrom(PutOut(base)));
@@ -1964,7 +1964,7 @@
 				COMTHROW( connection->CompareToBase( cps[i], &stat));
 				if(!stat) {
 					//Attr("isbound", "yes" );
-					array[w] += std::string( isbound_attr[w]) + "\"yes\" ";
+					array[w] += std::tstring( isbound_attr[w]) + _T("\"yes\" ");
 				}
 			}
 		}

Modified: trunk/GME/Parser/MgaDumper.h
==============================================================================
--- trunk/GME/Parser/MgaDumper.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MgaDumper.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -73,39 +73,40 @@
 
 // ------- Low level stuff
 	void Indent(int i);
-	void StartElem(const char *name);
-	void Attr(const char *name, const char *value);
-	void Attr(const char *name, const char *value, int len);
-	static bool HasMarkup(const char *value, int len);
-	void Data(const char *value, int len);
+	void StartElem(const TCHAR *name);
+	void Attr(const TCHAR *name, const TCHAR *value);
+	void Attr(const TCHAR *name, const TCHAR *value, int len);
+	static bool HasMarkup(const TCHAR *value, int len);
+	void Data(const TCHAR *value, int len);
 	void EndElem();
 
-	void Attr(const char *name, std::string &value)
+	void Attr(const TCHAR *name, std::tstring &value)
 	{
 		Attr(name, value.data(), value.length());
 	}
 
-	void Attr(const char *name, const CComBstrObj &value)
+	void Attr(const TCHAR *name, const CComBstrObj &value)
 	{
-		std::string t;
+		std::tstring t;
 		CopyTo(value, t);
 		Attr(name, t);
 	}
 
-	void Data(std::string &value)
+	void Data(std::tstring &value)
 	{
 		Data(value.data(), value.length());
 	}
 
 	void Data(const CComBstrObj &value)
 	{
-		std::string t;
-		CopyTo(value, t);
+		std::tstring t;
+		if (value.p != NULL)
+			CopyTo(value, t);
 		Data(t);
 	}
 
 	template<class INTERFACE, class FUNC_INTERFACE>
-	void Attr(const char *name, INTERFACE p, HRESULT (__stdcall FUNC_INTERFACE::*func)(BSTR *))
+	void Attr(const TCHAR *name, INTERFACE p, HRESULT (__stdcall FUNC_INTERFACE::*func)(BSTR *))
 	{
 		FUNC_INTERFACE *q = p;
 		ASSERT( q != NULL );
@@ -117,7 +118,7 @@
 	}
 
 	template<class INTERFACE, class FUNC_INTERFACE>
-	void LAttr(const char *name, INTERFACE p, HRESULT (__stdcall FUNC_INTERFACE::*func)(long *))
+	void LAttr(const TCHAR *name, INTERFACE p, HRESULT (__stdcall FUNC_INTERFACE::*func)(long *))
 	{
 		FUNC_INTERFACE *q = p;
 		ASSERT( q != NULL );
@@ -125,8 +126,8 @@
 		long value;
 		COMTHROW( (q->*func)(&value) );
 
-		char buf[16] = "0x";
-		_ltoa(value,buf+2, 16);
+		TCHAR buf[16] = _T("0x");
+		_ltot(value,buf+2, 16);
 
 		Attr(name, buf);
 	}
@@ -138,7 +139,10 @@
 		ASSERT( q != NULL );
 
 		CComBstrObj value;
-		COMTHROW( (q->*func)(PutOut(value)) );
+		COMTHROW( (q->*func)(&value.p) );
+		//ASSERT(value.p);
+		//if (value.p == 0)
+		//	DebugBreak();
 
 		Data(value);
 	}
@@ -193,9 +197,9 @@
 	void DumpFCO(IMgaFCO *fco, bool dump_attrs = true,
 		bool dump_name = true, bool dump_elems = true);
 	void DumpConstraints(IMgaObject *object);
-	void DumpIDRefs(const char *name, CComObjPtrVector<IMgaFCO> &fcos);
-	std::string DumpGUIDRefs( CComObjPtrVector<IMgaFCO>& fcos);
-	std::string DumpMixedGUIDRefs( CComObjPtrVector<IMgaFCO>& fcos);
+	void DumpIDRefs(const TCHAR *name, CComObjPtrVector<IMgaFCO> &fcos);
+	std::tstring DumpGUIDRefs( CComObjPtrVector<IMgaFCO>& fcos);
+	std::tstring DumpMixedGUIDRefs( CComObjPtrVector<IMgaFCO>& fcos);
 	void DumpConnDetails(CComObjPtr<IMgaConnection> connection);
 
 // ------- Sorters
@@ -215,7 +219,7 @@
 
 	struct elem
 	{
-		std::string name;
+		std::tstring name;
 		bool inbody;
 		bool indata;
 	};
@@ -249,9 +253,9 @@
 	void putInTerritory( CComObjPtrVector<IMgaFCO>&);
 	void putInTerritory( CComObjPtrVector<IMgaFolder>&);
 
-	//std::string m_curTopPath; // used for the 'closurename' calc
-	std::string m_currAbsPath;//? it is needed any more?
-	//std::string m_currParAbsPath; // used for 'closurepath' calc
+	//std::tstring m_curTopPath; // used for the 'closurename' calc
+	std::tstring m_currAbsPath;//? it is needed any more?
+	//std::tstring m_currParAbsPath; // used for 'closurepath' calc
 	bool m_v2;
 
 };

Modified: trunk/GME/Parser/MgaParser.cpp
==============================================================================
--- trunk/GME/Parser/MgaParser.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MgaParser.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -9,7 +9,7 @@
 #include "../Common/CommonCollection.h"
 #include <list>//slist
 
-const char * magic_exit_str = "Analysis done.Quit parsing.";
+const TCHAR * magic_exit_str = _T("Analysis done.Quit parsing.");
 // --------------------------- CMgaParser
 
 STDMETHODIMP CMgaParser::ParseFCOs(IMgaObject *here, BSTR filename)
@@ -22,7 +22,7 @@
 		CloseAll();
 
 		COMTHROW( progress.CoCreateInstance(L"Mga.MgaProgressDlg") );
-		COMTHROW( progress->SetTitle(PutInBstr("Importing XML file...")) );
+		COMTHROW( progress->SetTitle(_bstr_t(L"Importing XML file...")) );
 		COMTHROW( progress->StartProgressDialog(NULL) );
 
 		CComObjPtr<IMgaProject> p;
@@ -75,7 +75,7 @@
 			ranges.push_front(range_type());
 			ranges.front().begin = 1;
 			ranges.front().end = (counter_type)-1;
-			ranges.front().previous.name = "start";
+			ranges.front().previous.name = _T("start");
 			ranges.front().previous.object = target;
 			skip_element_level = 0;
 			
@@ -153,7 +153,7 @@
 		CloseAll();
 
 		COMTHROW( progress.CoCreateInstance(L"Mga.MgaProgressDlg") );
-		COMTHROW( progress->SetTitle(PutInBstr("Importing XML file...")) );
+		COMTHROW( progress->SetTitle(_bstr_t(L"Importing XML file...")) );
 		COMTHROW( progress->StartProgressDialog(NULL) );
 
 
@@ -262,7 +262,7 @@
 		libstodo.clear();
 		
 		COMTHROW( project->put_GUID(projectguid) );
-		if (projectversion) {
+		if (projectversion != _bstr_t("")) {
 			COMTHROW( project->put_Version(projectversion) );
 		}
 
@@ -305,7 +305,7 @@
 	{
 		CloseAll();
 		COMTHROW( progress.CoCreateInstance(L"Mga.MgaProgressDlg") );
-		COMTHROW( progress->SetTitle(PutInBstr("Analyzing XML file...")) );
+		COMTHROW( progress->SetTitle(_bstr_t(L"Analyzing XML file...")) );
 		COMTHROW( progress->StartProgressDialog(NULL) );
 
 
@@ -344,12 +344,11 @@
 		}
 		catch(const SAXException &e)
 		{
-			char * p_msg = XMLString::transcode( e.getMessage());
-			if( 0 != strcmp( p_msg, magic_exit_str))
+			XmlStr msg = e.getMessage();
+			if (msg != magic_exit_str)
 			{
-				ThrowXmlError( p_msg);
+				ThrowXmlError(msg.c_str());
 			}
-			XMLString::release( &p_msg);
 			// else just ignore it, we threw an exception for a good purpose:
 			// to quit the costly parsing operation
 		}
@@ -413,8 +412,8 @@
 
 // ------- Passes
 
-char progress_msg[512];
-char refresh_counter;
+TCHAR progress_msg[512];
+TCHAR refresh_counter;
 
 void CMgaParser::startElement(const XMLCh* const name, AttributeList& attributes)
 {
@@ -424,7 +423,7 @@
 
 	if( ++refresh_counter == 0 )
 	{
-		sprintf(progress_msg, "Phase: %d, number of parsed objects: %ld", pass_count, (long)counter/2);
+		_stprintf_s(progress_msg, _T("Phase: %d, number of parsed objects: %ld"), pass_count, (long)counter/2);
 		COMTHROW( progress->SetLine(0, PutInBstr(progress_msg)) );
 
 		if( pass_count == 1 )
@@ -516,7 +515,7 @@
 
 // ------- Lookup
 
-void CMgaParser::LookupByID(const std::string &id, CComObjPtr<IMgaObject> &ret)
+void CMgaParser::LookupByID(const std::tstring &id, CComObjPtr<IMgaObject> &ret)
 {
 	ASSERT( project != NULL );
 
@@ -530,7 +529,7 @@
 	}
 }
 
-void CMgaParser::LookupByID(const std::string &id, CComObjPtr<IMgaFCO> &ret)
+void CMgaParser::LookupByID(const std::tstring &id, CComObjPtr<IMgaFCO> &ret)
 {
 	ASSERT( project != NULL );
 
@@ -544,7 +543,7 @@
 	}
 }
 
-void CMgaParser::RegisterLookup(const std::string &id, IMgaObject *object)
+void CMgaParser::RegisterLookup(const std::tstring &id, IMgaObject *object)
 {
 	ASSERT( object != NULL );
 
@@ -561,18 +560,18 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		if( (*i).first == "id" )
+		if( (*i).first == _T("id") )
 		{
 			RegisterLookup((*i).second, object);
 			//break;
 		}
-		else if( m_maintainGuids && (*i).first == "guid")
+		else if( m_maintainGuids && (*i).first == _T("guid"))
 		{
 				// when fco was created already got a fresh GUID, but we need to maintain
 				// the old guid, thus we overwrite the old value with the parsed one
 			object->PutGuidDisp( CComBSTR( (*i).second.c_str()));
 		}
-		else if( (*i).first == "perm" )
+		else if( (*i).first == _T("perm") )
 		{
 			// the plain presence of the attribute indicates 'ro' flag
 			// no need to parse the value: (*i).second
@@ -585,7 +584,7 @@
 	readonly_stack.push_back( perm_present); // we insert a value anyway into the stack
 }
 
-void CMgaParser::fireStartFunction(const std::string& namestr, const attributes_type& attributes)
+void CMgaParser::fireStartFunction(const std::tstring& namestr, const attributes_type& attributes)
 {
 	if(funcTableState == MGA)
 	{
@@ -650,7 +649,7 @@
 }
 
 
-void CMgaParser::fireEndFunction(const std::string& namestr)
+void CMgaParser::fireEndFunction(const std::tstring& namestr)
 {
 	if(funcTableState == MGA)
 	{
@@ -719,23 +718,23 @@
 
 CMgaParser::elementfunc CMgaParser::elementfuncs_mga[] = 
 {
-	elementfunc("project", StartProject, EndNone),
-	elementfunc("name", StartNone, EndName),
-	elementfunc("comment", StartNone, EndComment),
-	elementfunc("author", StartNone, EndAuthor),
-	elementfunc("value", StartNone, EndValue),
-	elementfunc("folder", StartFolder, EndObject),
-	elementfunc("model", StartModel, EndObject),
-	elementfunc("atom", StartAtom, EndObject),
-	elementfunc("regnode", StartRegNode, EndNone),
-	elementfunc("attribute", StartAttribute, EndNone),
-	elementfunc("connection", StartConnection, EndObject),
-	elementfunc("connpoint", StartConnPoint, EndNone),
-	elementfunc("constraint", StartNone, EndConstraint),
-	elementfunc("reference", StartReference, EndObject),
-	elementfunc("set", StartSet, EndObject),
-	elementfunc("clipboard", StartClipboard, EndNone),
-	elementfunc("", NULL, NULL)
+	elementfunc(_T("project"), StartProject, EndNone),
+	elementfunc(_T("name"), StartNone, EndName),
+	elementfunc(_T("comment"), StartNone, EndComment),
+	elementfunc(_T("author"), StartNone, EndAuthor),
+	elementfunc(_T("value"), StartNone, EndValue),
+	elementfunc(_T("folder"), StartFolder, EndObject),
+	elementfunc(_T("model"), StartModel, EndObject),
+	elementfunc(_T("atom"), StartAtom, EndObject),
+	elementfunc(_T("regnode"), StartRegNode, EndNone),
+	elementfunc(_T("attribute"), StartAttribute, EndNone),
+	elementfunc(_T("connection"), StartConnection, EndObject),
+	elementfunc(_T("connpoint"), StartConnPoint, EndNone),
+	elementfunc(_T("constraint"), StartNone, EndConstraint),
+	elementfunc(_T("reference"), StartReference, EndObject),
+	elementfunc(_T("set"), StartSet, EndObject),
+	elementfunc(_T("clipboard"), StartClipboard, EndNone),
+	elementfunc(_T(""), NULL, NULL)
 };
 
 // ------- Element Handlers
@@ -763,25 +762,24 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		if( i->first == "guid" )
+		if( i->first == _T("guid") )
 		{
-			CComBstrObj bstr;
-			CopyTo(i->second, bstr);
+			_bstr_t bstr = i->second.c_str();
 
 			GUID guid;
 			CopyTo(bstr, guid);
 
 			CopyTo(guid, projectguid);
 		}
-		else if( i->first == "version" )
+		else if( i->first == _T("version") )
 		{	
 			CComBSTR currversion;
 			COMTHROW( project->get_Version(&currversion) );
 			if (currversion.Length() == 0) {
-				CopyTo(i->second, &projectversion); 
+				projectversion = i->second.c_str();
 			}
 		}
-		else if( i->first == "metaname")
+		else if( i->first == _T("metaname"))
 		{
 			// if host paradigm != imported project's paradigm
 			if( host_pn != CComBSTR( i->second.c_str()))
@@ -800,7 +798,7 @@
 void CMgaParser::StartClipboard(const attributes_type &attributes)
 {
 	ASSERT( project != NULL );
-	ASSERT( GetPrevName() == "start" );
+	ASSERT( GetPrevName() == _T("start") );
 	ASSERT( GetPrevious().object != NULL );
 	if( !GetPrevious().object) HR_THROW(E_XMLPARSER);//by ZolMol
 
@@ -824,15 +822,15 @@
 	CComObjPtr<IMgaFolder> folder;
 
 	if( SUCCEEDED(obj.QueryInterface(model)) )
-		GetCurrent().name = "model";
+		GetCurrent().name = _T("model");
 	else if( SUCCEEDED(obj.QueryInterface(folder)) )
-		GetCurrent().name = "folder";
+		GetCurrent().name = _T("folder");
 	// Commented, thus allowing clipboard snippets to be 
 	// dropped onto atoms/sets/references/connections too
 	//else
 	//	HR_THROW(E_INVALID_FILENAME);
 
-	const std::string *parname_hint = GetByNameX(attributes, "paradigmnamehint");
+	const std::tstring *parname_hint = GetByNameX(attributes, _T("paradigmnamehint"));
 	// importing from different paradigm
 	if( parname_hint != NULL && host_pn != CComBSTR( parname_hint->c_str()))
 	{
@@ -845,11 +843,11 @@
 
 void CMgaParser::EndName()
 {
-	if( GetPrevName() == "project" )
+	if( GetPrevName() == _T("project") )
 	{
-		COMTHROW( project->put_Name(PutInBstr(GetCurrData())) );
+            COMTHROW( project->put_Name(PutInBstr(GetCurrData())) );
 	}
-	else if( GetPrevName() == "constraint" )
+	else if( GetPrevName() == _T("constraint") )
 	{
 		constraint_name = GetCurrData();
 	}
@@ -863,7 +861,7 @@
 
 void CMgaParser::EndComment()
 {
-	if( GetPrevName() == "project" )
+	if( GetPrevName() == _T("project") )
 	{
 		COMTHROW( project->put_Comment(PutInBstr(GetCurrData())) );
 	}
@@ -873,9 +871,9 @@
 
 void CMgaParser::EndAuthor()
 {
-	if( GetPrevName() == "project" )
+	if( GetPrevName() == _T("project") )
 	{
-		COMTHROW( project->put_Author(PutInBstr(GetCurrData())) );
+            COMTHROW( project->put_Author(PutInBstr(GetCurrData())) );
 	}
 	else
 		HR_THROW(E_INVALID_DTD);
@@ -887,11 +885,11 @@
 	if( GetPrevious().object == NULL )
 		return;
 
-	if( GetPrevName() == "constraint" )
+	if( GetPrevName() == _T("constraint") )
 	{
 		constraint_value = GetCurrData();
 	}
-	else if( GetPrevName() == "regnode" )
+	else if( GetPrevName() == _T("regnode") )
 	{
 		CComObjPtr<IMgaRegNode> regnode;
 		GetPrevObj(regnode);
@@ -904,7 +902,7 @@
 		if( status == 0 )
 			COMTHROW( regnode->put_Value(PutInBstr(GetCurrData())) );
 	}
-	else if( GetPrevName() == "attribute" ) 
+	else if( GetPrevName() == _T("attribute") ) 
 	{
 		CComObjPtr<IMgaAttribute> attr;
 		GetPrevObj(attr);
@@ -930,16 +928,16 @@
 		case ATTVAL_STRING:
 		case ATTVAL_ENUM:
 		case ATTVAL_DYNAMIC:
-			CopyTo(GetCurrData(), v);
+			v = GetCurrData().c_str();
 			break;
 
 		case ATTVAL_INTEGER:
-			CopyTo(GetCurrData(), v);
+			v = GetCurrData().c_str();
 			COMTHROW( v.ChangeType(VT_I4) );
 			break;
 
 		case ATTVAL_DOUBLE:
-			CopyTo(GetCurrData(), v);
+			v = GetCurrData().c_str();
 			COMTHROW( v.ChangeType(VT_R8) );
 			break;
 
@@ -974,10 +972,10 @@
 
 
 void CMgaParser::preparerelid(const attributes_type &attributes) {
-	const std::string & relidattr = GetByName(attributes, "relid");
+	const std::tstring & relidattr = GetByName(attributes, _T("relid"));
 	ASSERT(relid == -2);
 	if(relidattr.size()) {
-		relid = strtol(relidattr.c_str(),NULL, 0);
+		relid = _tcstol(relidattr.c_str(), NULL, 0);
 		if(!manual_relid_mode) {
 			COMTHROW(project->put_Preferences(project_prefs | MGAPREF_MANUAL_RELIDS));
 		}
@@ -1006,7 +1004,7 @@
 {
 	CComObjPtr<IMgaFolder> folder;
 
-	if( GetPrevName() == "project" )
+	if( GetPrevName() == _T("project") )
 	{
 		COMTHROW( project->get_RootFolder(PutOut(folder)) );
 	}
@@ -1016,8 +1014,8 @@
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaFolder> meta;
-		CComBSTR fname( PutInBstrAttr(attributes, "kind"));
-		const std::string &libn = GetByName(attributes,"libref");
+		_bstr_t fname(PutInBstrAttr(attributes, _T("kind")));
+        const std::tstring &libn = GetByName(attributes, _T("libref"));
 
 		preparerelid(attributes);
 
@@ -1059,7 +1057,7 @@
 	ASSERT( folder != NULL );
 	GetCurrent().object = folder;
 
-	long crid = toLong(GetByName(attributes,"childrelidcntr"));
+	long crid = toLong(GetByName(attributes,_T("childrelidcntr")));
 	GetCurrent().exnuminfo = crid;
 	COMTHROW(folder->put_ChildRelIDCounter(crid));
 
@@ -1069,7 +1067,7 @@
 
 void CMgaParser::ResolveDerivation(const attributes_type &attributes, deriv_type &deriv)
 {
-	const std::string *s = GetByNameX(attributes, "derivedfrom");
+	const std::tstring *s = GetByNameX(attributes, _T("derivedfrom"));
 	if( s == NULL )
 	{
 		deriv.from.Release();
@@ -1080,11 +1078,11 @@
 	if( deriv.from == NULL )
 		throw pass_exception();
 
-	s = GetByNameX(attributes, "isinstance");
-	deriv.isinstance = ( s != NULL && *s == "yes" ) ? VARIANT_TRUE : VARIANT_FALSE;
+	s = GetByNameX(attributes, _T("isinstance"));
+	deriv.isinstance = ( s != NULL && *s == _T("yes") ) ? VARIANT_TRUE : VARIANT_FALSE;
 
-	s = GetByNameX(attributes, "isprimary");
-	deriv.isprimary = ( s != NULL && *s == "no" ) ? false : true;
+	s = GetByNameX(attributes, _T("isprimary"));
+	deriv.isprimary = ( s != NULL && *s == _T("no") ) ? false : true;
 }
 
 void CMgaParser::StartModel(const attributes_type &attributes)
@@ -1096,7 +1094,7 @@
 	(*this.*m_resolveDerFuncPtr)(attributes, deriv);
 
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -1109,7 +1107,7 @@
 		else
 		{
 			CComObjPtr<IMgaMetaFCO> meta;
-			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 				OBJTYPE_MODEL, PutOut(meta)) );
 			ASSERT( meta != NULL );
 
@@ -1119,15 +1117,15 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_MODEL,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_MODEL,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -1156,7 +1154,7 @@
 	ASSERT( model != NULL );
 
 	GetCurrent().object = model;
-	long crid = toLong(GetByName(attributes,"childrelidcntr"));
+	long crid = toLong(GetByName(attributes,_T("childrelidcntr")));
 	GetCurrent().exnuminfo = crid;
 	COMTHROW(CComQIPtr<IMgaModel>(model)->put_ChildRelIDCounter(crid));
 
@@ -1173,7 +1171,7 @@
 	(*this.*m_resolveDerFuncPtr)(attributes, deriv);
 
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -1185,7 +1183,7 @@
 		else
 		{
 			CComObjPtr<IMgaMetaFCO> meta;
-			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"),
+			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")),
 				OBJTYPE_ATOM, PutOut(meta)) );
 			ASSERT( meta != NULL );
 
@@ -1196,15 +1194,15 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_ATOM,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_ATOM,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -1242,24 +1240,23 @@
 {
 	CComObjPtr<IMgaRegNode> regnode;
 
-	CComBstrObj name;
-	CopyTo(GetByName(attributes, "name"), name);
+	_bstr_t name = GetByName(attributes, _T("name")).c_str();
 
-	if( GetPrevName() == "regnode" )
+	if( GetPrevName() == _T("regnode") )
 	{
 		CComObjPtr<IMgaRegNode> prev;
 		GetPrevObj(prev);
 
 		COMTHROW( prev->get_SubNodeByName(name, PutOut(regnode)) );
 	}
-	else if( GetPrevName() == "folder" )
+	else if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
 
 		COMTHROW( prev->get_RegistryNode(name, PutOut(regnode)) );
 	}
-	else if( GetPrevName()== "attribute" )
+	else if( GetPrevName()== _T("attribute") )
 	{
 		CComObjPtr<IMgaAttribute> prev;
 		GetPrevObj(prev);
@@ -1275,10 +1272,10 @@
 	}
 	ASSERT( regnode != NULL );
 
-	if( GetByNameX(attributes, "status") == NULL )
+	if( GetByNameX(attributes, _T("status")) == NULL )
 		COMTHROW( regnode->put_Value(NULL) );
 
-	if( GetByName(attributes, "isopaque") == "yes" )
+	if( GetByName(attributes, _T("isopaque")) == _T("yes") )
 		COMTHROW( regnode->put_Opacity(VARIANT_TRUE) );
 
 	GetCurrent().object = regnode;
@@ -1292,7 +1289,7 @@
 	GetPrevObj(fco);
 
 	CComObjPtr<IMgaMetaAttribute> metaattr;
-	HRESULT hr = resolver->get_AttrByStr(fco, PutInBstrAttr(attributes, "kind"), PutOut(metaattr));
+	HRESULT hr = resolver->get_AttrByStr(fco, PutInBstrAttr(attributes, _T("kind")), PutOut(metaattr));
 
 	if( FAILED(hr) || metaattr == NULL )
 	{
@@ -1305,9 +1302,9 @@
 	ASSERT( attr != NULL );
 	GetCurrent().object = attr;
 
-	if( GetByNameX(attributes, "status") == NULL )
+	if( GetByNameX(attributes, _T("status")) == NULL )
 	{
-		// we set some value, and from the "value" element we set the actual value
+		// we set some value, and from the _T("value") element we set the actual value
 
 		CComVariant v;
 		COMTHROW( attr->get_Value(PutOut(v)) );
@@ -1323,7 +1320,7 @@
 	//ResolveDerivation(attributes, deriv);
 	(*this.*m_resolveDerFuncPtr)(attributes, deriv);
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -1336,7 +1333,7 @@
 		else
 		{
 			CComObjPtr<IMgaMetaFCO> meta;
-			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 				OBJTYPE_CONNECTION, PutOut(meta)) );
 			ASSERT( meta != NULL );
 
@@ -1346,14 +1343,14 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_CONNECTION,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_CONNECTION,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -1382,7 +1379,7 @@
 	ASSERT( conn != NULL );
 	GetCurrent().object = conn;
 
-	if( GetByName(attributes, "isbound") == "yes" ) GetCurrent().exstrinfo = "skip";
+	if( GetByName(attributes, _T("isbound")) == _T("yes") ) GetCurrent().exstrinfo = _T("skip");
 
 	//RegisterReadOnlyStatus( attributes);
 	RegisterLookup(attributes, conn);
@@ -1390,14 +1387,14 @@
 
 void CMgaParser::StartConnPoint(const attributes_type &attributes)
 {
-	ASSERT( GetPrevName() == "connection" );
+	ASSERT( GetPrevName() == _T("connection") );
 	CComObjPtr<IMgaConnection> conn;
 	GetPrevObj(conn);
 
-	if( GetPrevious().exstrinfo == "skip" || GetByName(attributes, "isbound") == "yes" ) return;
+	if( GetPrevious().exstrinfo == _T("skip") || GetByName(attributes, _T("isbound")) == _T("yes") ) return;
 
 	CComObjPtr<IMgaFCO> target;
-	LookupByID(GetByName(attributes, "target"), target);
+	LookupByID(GetByName(attributes, _T("target")), target);
 	if( target == NULL )
 		throw pass_exception();
 
@@ -1405,7 +1402,7 @@
 	CComObjPtr<IMgaFCOs> coll;
 	COMTHROW(coll.CoCreateInstance(L"Mga.MgaFCOs"));
 
-	const std::string *s = GetByNameX(attributes, "refs");
+	const std::tstring *s = GetByNameX(attributes, _T("refs"));
 	if( s != NULL )
 	{
 		int pos = s->find_first_not_of(' ', 0);
@@ -1418,7 +1415,7 @@
 			ASSERT( pos2 > pos );
 
 			CComObjPtr<IMgaFCO> ref;
-			LookupByID(std::string(*s, pos, pos2-pos), ref);
+			LookupByID(std::tstring(*s, pos, pos2-pos), ref);
 
 			if( ref == NULL )
 				throw pass_exception();
@@ -1431,9 +1428,8 @@
 
 	CComObjPtr<IMgaConnPoint> connpoint;
 
-	const std::string& role = GetByName(attributes, "role");
-	CComBSTR brole;
-	CopyTo( role, &brole);
+	const std::tstring& role = GetByName(attributes, _T("role"));
+	_bstr_t brole = role.c_str();
 
 	// Since the Refresh operation created some derived connections
 	// in its own way, some derived connections might have been
@@ -1453,14 +1449,14 @@
 		{
 			CComBSTR old_role;
 			COMTHROW( old_cp->get_ConnRole( &old_role));
-			if( old_role == brole) // check if targets are equal
+			if( old_role == static_cast<LPCOLESTR>(brole)) // check if targets are equal
 			{
 				CComPtr<IMgaFCO> old_tgt;
 				COMTHROW( old_cp->get_Target( &old_tgt));
 				if( old_tgt == target)
 				{
 					// same role not inserted twice
-					CComBSTR msg( "Warning: Superfluous connection role ignored!");
+					CComBSTR msg( L"Warning: Superfluous connection role ignored!");
 					if( m_GME) COMTHROW( m_GME->ConsoleMessage( msg, MSG_WARNING));
 					return;
 				}
@@ -1468,7 +1464,7 @@
 		}
 	}
 
-	COMTHROW( conn->AddConnPoint(PutInBstr(GetByName(attributes, "role")), 0,	// FIXME: multiplicity
+	COMTHROW( conn->AddConnPoint(PutInBstr(GetByName(attributes, _T("role"))), 0,	// FIXME: multiplicity
 		target, coll, PutOut(connpoint)) );
 }
 
@@ -1476,7 +1472,7 @@
 {
 	CComObjPtr<IMgaConstraint> constraint;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> folder;
 		GetPrevObj(folder);
@@ -1504,7 +1500,7 @@
 
 	CComObjPtr<IMgaFCO> referred;
 
-	const std::string *s = GetByNameX(attributes, "referred");
+	const std::tstring *s = GetByNameX(attributes, _T("referred"));
 	if( s != NULL )
 	{
 		LookupByID(*s, referred);
@@ -1513,7 +1509,7 @@
 			throw pass_exception();
 	}
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -1526,7 +1522,7 @@
 		else
 		{
 			CComObjPtr<IMgaMetaFCO> meta;
-			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 				OBJTYPE_REFERENCE, PutOut(meta)) );
 			ASSERT( meta != NULL );
 
@@ -1536,14 +1532,14 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_REFERENCE,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_REFERENCE,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -1571,7 +1567,7 @@
 	}
 	ASSERT( fco != NULL );
 
-	if( !(GetByName(attributes, "isbound") == "yes") && referred != NULL )
+	if( !(GetByName(attributes, _T("isbound")) == _T("yes")) && referred != NULL )
 	{
 		CComObjPtr<IMgaReference> ref;
 		COMTHROW( fco.QueryInterface(ref) );
@@ -1595,7 +1591,7 @@
 
 	std::list< CComObjPtr<IMgaFCO> > members;//slist
 
-	const std::string *s = GetByNameX(attributes, "members");
+	const std::tstring *s = GetByNameX(attributes, _T("members"));
 	if( s != NULL )
 	{
 		int pos = s->find_first_not_of(' ', 0);
@@ -1608,7 +1604,7 @@
 			ASSERT( pos2 > pos );
 
 			CComObjPtr<IMgaFCO> member;
-			LookupByID(std::string(*s, pos, pos2-pos), member);
+			LookupByID(std::tstring(*s, pos, pos2-pos), member);
 
 			if( member == NULL )
 				throw pass_exception();
@@ -1619,7 +1615,7 @@
 		}
 	}
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -1632,7 +1628,7 @@
 		else
 		{
 			CComObjPtr<IMgaMetaFCO> meta;
-			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 				OBJTYPE_SET, PutOut(meta)) );
 			ASSERT( meta != NULL );
 
@@ -1642,14 +1638,14 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_SET,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_SET,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -1682,7 +1678,7 @@
 	CComObjPtr<IMgaSet> mgaset;
 	COMTHROW( fco.QueryInterface(mgaset) );
 
-	if( !(GetByName(attributes, "isbound") == "yes") ) {
+	if( !(GetByName(attributes, _T("isbound")) == _T("yes")) ) {
 		COMTHROW( mgaset->RemoveAll() ); //by ZolMol: if not bound then the members are different, remove the inherited members
 		std::list< CComObjPtr<IMgaFCO> >::iterator i = members.begin();//slist
 		while( i != members.end() )
@@ -1701,9 +1697,9 @@
 
 CMgaParser::elementfunc CMgaParser::elementfuncs_mgainfo[] = 
 {
-	elementfunc("project", StartProjectInfo, EndNone),
-	elementfunc("name", StartNone, EndNameInfo),
-	elementfunc("", NULL, NULL)
+	elementfunc(_T("project"), StartProjectInfo, EndNone),
+	elementfunc(_T("name"), StartNone, EndNameInfo),
+	elementfunc(_T(""), NULL, NULL)
 };
 
 
@@ -1714,10 +1710,9 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		if( i->first == "metaguid" )
+		if( i->first == _T("metaguid") )
 		{
-			CComBstrObj bstr;
-			CopyTo(i->second, bstr);
+			_bstr_t bstr = i->second.c_str();
 
 			GUID guid;
 			CopyTo(bstr, guid);
@@ -1729,31 +1724,19 @@
 
 		}
 
-		if( i->first == "metaname" )
+		if( i->first == _T("metaname") )
 		{
-			CComBstrObj bstr;
-			CopyTo(i->second, bstr);
-
-			*infoparname = bstr.Detach();
-
+			*infoparname = _bstr_t(i->second.c_str()).Detach();
 		}
 
-		if( i->first == "metaversion" )
+		if( i->first == _T("metaversion") )
 		{
-			CComBstrObj bstr;
-			CopyTo(i->second, bstr);
-
-			*infoparversion = bstr.Detach();
-
+			*infoparversion = _bstr_t(i->second.c_str()).Detach();
 		}
 
-		if( i->first == "version" )
+		if( i->first == _T("version") )
 		{
-			CComBstrObj bstr;
-			CopyTo(i->second, bstr);
-
-			*infoversion = bstr.Detach();
-
+			*infoversion = _bstr_t(i->second.c_str()).Detach();
 		}
 
 
@@ -1763,10 +1746,9 @@
 
 void CMgaParser::EndNameInfo()
 {
-	if( GetPrevName() == "project" )
+	if( GetPrevName() == _T("project") )
 	{
-		CComBstrObj nn = PutInBstr(GetCurrData());
-		*infoprojname = nn.Detach();
+		*infoprojname = _bstr_t(GetCurrData().c_str()).Detach();
 		// analysis done, why waste time by processing further the xme file?
 		throw SAXException( magic_exit_str); // trick used & handled only by GetXMLInfo()
 	}
@@ -1774,8 +1756,8 @@
 
 CMgaParser::elementfunc CMgaParser::elementfuncs_clipmgainfo[] = 
 {
-	elementfunc("clipboard", StartClipboardInfo, EndNone),
-	elementfunc("", NULL, NULL)
+	elementfunc(_T("clipboard"), StartClipboardInfo, EndNone),
+	elementfunc(_T(""), NULL, NULL)
 };
 
 void CMgaParser::StartClipboardInfo(const attributes_type &attributes)
@@ -1787,26 +1769,22 @@
 	attributes_iterator e = attributes.end();
 	while( i != e )
 	{
-		if( i->first == "closureversion" )
+		if( i->first == _T("closureversion") )
 		{
+			// if the value is _T("") then the bstr will be null, so bool introduced to correctly check the presence of "closureversion" token
 			closure_version_found = true;
-			CComBstrObj bstr;
-			CopyTo(i->second, bstr); // if the value is "" then the bstr will be null, so bool introduced to correctly check the presence of "closureversion" token
 
-			*closversion = bstr.Detach();
+			*closversion = _bstr_t(i->second.c_str()).Detach();
 		}
-		else if( i->first == "acceptingkind" )
+		else if( i->first == _T("acceptingkind") )
 		{
-			CComBstrObj bstr;
-			CopyTo(i->second, bstr);
-
-			*closacckind = bstr.Detach();
+			*closacckind = _bstr_t(i->second.c_str()).Detach();
 		}
 		++i;
 	}
 	if( !closure_version_found && *closversion == 0) // not found such token
 	{
-		CComBSTR bstr("0");
+		CComBSTR bstr(L"0");
 		*closversion = bstr.Detach();
 	}
 }
@@ -1817,7 +1795,7 @@
 	{
 		CloseAll();
 		COMTHROW( progress.CoCreateInstance(L"Mga.MgaProgressDlg") );
-		COMTHROW( progress->SetTitle(PutInBstr("Analyzing clipboard data...")) );
+		COMTHROW( progress->SetTitle(_bstr_t(L"Analyzing clipboard data...")) );
 		COMTHROW( progress->StartProgressDialog(NULL) );
 
 

Modified: trunk/GME/Parser/MgaParser.h
==============================================================================
--- trunk/GME/Parser/MgaParser.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MgaParser.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -63,7 +63,7 @@
 	STDMETHOD(ParseClos4)(IMgaObject *p, BSTR filename, int options); // smart
 	STDMETHOD(ParseProject)(IMgaProject *p, BSTR filename);
 
-	std::string GetClipXMLInfo2();
+	std::tstring GetClipXMLInfo2();
 
 	void CloseAll();
 
@@ -72,8 +72,8 @@
 public:
 	virtual void startElement(const XMLCh* const name, AttributeList& attributes);
     virtual void endElement(const XMLCh* const name);
-	void fireStartFunction(const std::string& name, const attributes_type& attributes);
-	void fireEndFunction(const std::string& name);
+	void fireStartFunction(const std::tstring& name, const attributes_type& attributes);
+	void fireEndFunction(const std::tstring& name);
 
 	struct range_type
 	{
@@ -91,14 +91,14 @@
 	};
 
 	typedef struct librecord {
-		std::string libname;
+		std::tstring libname;
 		CComPtr<IMgaFolder> f;
 	} librecord;
 
 	typedef std::vector<librecord> librecords;
 	librecords libstodo;
 	CComVariant projectguid;
-	CComBSTR	projectversion;
+	_bstr_t	projectversion;
 
 // ------- Logging
 
@@ -135,8 +135,8 @@
 
 	long project_prefs, project_prefs_orig;
 
-	std::string constraint_name;
-	std::string constraint_value;
+	std::tstring constraint_name;
+	std::tstring constraint_value;
 
 	counter_type max_counter;
 	int pass_count;
@@ -144,15 +144,15 @@
 // ------- Lookup
 
 public:
-	void LookupByID(const std::string &id, CComObjPtr<IMgaObject> &object);
-	void LookupByID(const std::string &id, CComObjPtr<IMgaFCO> &fco);
-	void RegisterLookup(const std::string &id, IMgaObject *object);
+	void LookupByID(const std::tstring &id, CComObjPtr<IMgaObject> &object);
+	void LookupByID(const std::tstring &id, CComObjPtr<IMgaFCO> &fco);
+	void RegisterLookup(const std::tstring &id, IMgaObject *object);
 	void RegisterLookup(const attributes_type &attributes, IMgaObject *object);
 
 	//void RegisterReadOnlyStatus( const attributes_type &attributes);
 	bool GetIntendedReadOnlyFlag( bool *p_isReadOnly);
 
-	typedef stdext::hash_map<std::string, CComBstrObj> id_lookup_type;
+	typedef stdext::hash_map<std::tstring, CComBstrObj> id_lookup_type;
 	typedef id_lookup_type::iterator id_lookup_iterator;
 
 	id_lookup_type id_lookup;
@@ -181,26 +181,26 @@
 	bool findPlaceForElem( const attributes_type &attributes, deriv_type& deriv, CComObjPtr<IMgaFolder>& place_fld, CComObjPtr<IMgaModel>& place_mdl);
 
 	bool parseConnection( CComObjPtr<IMgaObject> prev, const attributes_type &attributes, CComObjPtr<IMgaFCO>& pFoundSrcObj, CComObjPtr<IMgaFCO>& pFoundDstObj, CComObjPtr<IMgaFCOs>& pFoundSrcRefChain, CComObjPtr<IMgaFCOs>& pFoundDstRefChain);
-	bool findConnectionEnd( CComObjPtr<IMgaObject> prev, const std::string& isbound, const std::string& role, const std::string& targetGUID, const std::string& target, const std::string& refchainGUID, const std::string& refchain, CComObjPtr<IMgaFCO>& pFoundObj, CComObjPtr<IMgaFCOs>& pFoundRefChain);
+	bool findConnectionEnd( CComObjPtr<IMgaObject> prev, const std::tstring& isbound, const std::tstring& role, const std::tstring& targetGUID, const std::tstring& target, const std::tstring& refchainGUID, const std::tstring& refchain, CComObjPtr<IMgaFCO>& pFoundObj, CComObjPtr<IMgaFCOs>& pFoundRefChain);
 	bool findObject( const CComObjPtr<IMgaModel>& prev, const attributes_type& attributes, CComObjPtr<IMgaFCO>& obj, const char type);
 	bool findObject( const CComObjPtr<IMgaFolder>& prev, const attributes_type& attributes, CComObjPtr<IMgaFCO>& obj, const char type);
 	bool findObjectIn( const CComObjPtr<IMgaObject>& parent, const CComObjPtrVector<IMgaFCO>& vec, const attributes_type& attributes, CComObjPtr<IMgaFCO>& obj, const char type);
 	bool findFolderIn( const CComObjPtr<IMgaFolder>& prev, const attributes_type& attributes, CComObjPtr<IMgaFolder>& fol);
-	void findObjOnRelPath( CComObjPtr<IMgaObject> obj_rel_to, const std::string& relpath , CComObjPtr<IMgaObject>& obj, const std::string& text = "");
-	void findObjOnAbsPath( CComObjPtr<IMgaProject> project, const std::string& abspath , CComObjPtr<IMgaObject>& obj, const std::string& text = "");
-	void findFCOWithRelPathAndGUID( CComObjPtr<IMgaObject> obj_rel_to, const std::string& relpath, const std::string& guid, CComObjPtr<IMgaFCO>& pFoundFco);
-	void findFCOWithGUIDInTree( CComObjPtr<IMgaObject> pParent, const std::string& guid, CComObjPtr<IMgaFCO>& pFoundFCO);
-	void findFCOWithGUID( CComObjPtr<IMgaObject> prev, const std::string& guid, CComObjPtr<IMgaFCO>& pFoundFCO);
-	void stepUpInHierarchy( CComObjPtr<IMgaObject>& pCurrentObj, const std::string& originalPath, CComObjPtr<IMgaObject>& pNewParent, std::string& remainingPath);
+	void findObjOnRelPath( CComObjPtr<IMgaObject> obj_rel_to, const std::tstring& relpath , CComObjPtr<IMgaObject>& obj, const std::tstring& text);
+	void findObjOnAbsPath( CComObjPtr<IMgaProject> project, const std::tstring& abspath , CComObjPtr<IMgaObject>& obj, const std::tstring& text);
+	void findFCOWithRelPathAndGUID( CComObjPtr<IMgaObject> obj_rel_to, const std::tstring& relpath, const std::tstring& guid, CComObjPtr<IMgaFCO>& pFoundFco);
+	void findFCOWithGUIDInTree( CComObjPtr<IMgaObject> pParent, const std::tstring& guid, CComObjPtr<IMgaFCO>& pFoundFCO);
+	void findFCOWithGUID( CComObjPtr<IMgaObject> prev, const std::tstring& guid, CComObjPtr<IMgaFCO>& pFoundFCO);
+	void stepUpInHierarchy( CComObjPtr<IMgaObject>& pCurrentObj, const std::tstring& originalPath, CComObjPtr<IMgaObject>& pNewParent, std::tstring& remainingPath);
 
 	static bool isNullRef( CComObjPtr<IMgaFCO>& ref);
 	static bool isEmptySet( CComObjPtr<IMgaFCO>& set);
 	bool isNeedFor2ndStep();
 	void tryToFindMissedReferreds();
 	void tryToFindMissedSetMembers();
-	std::map< CComObjPtr<IMgaFCO>, std::string, CompareCComObj > m_notFoundReferredObject;
-	std::map< CComObjPtr<IMgaFCO>, std::vector< std::string >, CompareCComObj > m_notFoundSetMembers;
-	std::string m_clVerStr;
+	std::map< CComObjPtr<IMgaFCO>, std::tstring, CompareCComObj > m_notFoundReferredObject;
+	std::map< CComObjPtr<IMgaFCO>, std::vector< std::tstring >, CompareCComObj > m_notFoundSetMembers;
+	std::tstring m_clVerStr;
 
 	bool manual_relid_mode;
 	long relid;

Modified: trunk/GME/Parser/MgaParserBC.cpp
==============================================================================
--- trunk/GME/Parser/MgaParserBC.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MgaParserBC.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -21,7 +21,7 @@
 		CloseAll();
 
 		COMTHROW( progress.CoCreateInstance(L"Mga.MgaProgressDlg") );
-		COMTHROW( progress->SetTitle(PutInBstr("Importing CopyClosured XML data...")) );
+		COMTHROW( progress->SetTitle(_bstr_t(L"Importing CopyClosured XML data...")) );
 		COMTHROW( progress->StartProgressDialog(NULL) );
 
 		CComObjPtr<IMgaProject> p;
@@ -45,18 +45,18 @@
 		m_target = target;
 		m_resolveDerFuncPtr = &CMgaParser::ResolveClosure1Derivation;
 		//m_clVer = 1;
-		m_clVerStr = "1";//end
+		m_clVerStr = _T("1");//end
 
 		if( m_target && m_GME) 
 		{
 			CComBSTR bstr, id, nm;
 			COMTHROW( m_target->get_ID( &id));
 			COMTHROW( m_target->get_Name( &nm));
-			bstr.Append("[Closure Parser] Inserting copy closured data into: <A HREF=\"mga:");
+			bstr.Append(L"[Closure Parser] Inserting copy closured data into: <A HREF=\"mga:");
 			bstr.AppendBSTR( id);
-			bstr.Append("\">");
+			bstr.Append(L"\">");
 			bstr.AppendBSTR( nm);
-			bstr.Append("</A>");
+			bstr.Append(L"</A>");
 			COMTHROW( m_GME->ConsoleMessage(bstr, MSG_INFO));
 		}
 
@@ -91,7 +91,7 @@
 			ranges.push_front(range_type());
 			ranges.front().begin = 1;
 			ranges.front().end = (counter_type)-1;
-			ranges.front().previous.name = "start";
+			ranges.front().previous.name = _T("start");
 			ranges.front().previous.object = target;
 			skip_element_level = 0;
 			
@@ -161,30 +161,30 @@
 
 CMgaParser::elementfunc CMgaParser::elementfuncs_bcmga[] = 
 {
-	//elementfunc("project", StartProject, EndNone),
-	elementfunc("name", StartNone, EndName),
-	elementfunc("comment", StartNone, EndComment),
-	elementfunc("author", StartNone, EndAuthor),
-	elementfunc("value", StartNone, EndValue),
-	elementfunc("regnode", StartRegNode, EndNone),
-	elementfunc("attribute", StartAttribute, EndNone),
-	elementfunc("constraint", StartNone, EndConstraint),
-	elementfunc("folder", StartFolder, EndNone),
-	elementfunc("model", StartModel, EndNone),
-	elementfunc("atom", StartAtom, EndNone),
-	elementfunc("connection", StartConnection, EndNone),
-	elementfunc("connpoint", StartBCConnPoint, EndNone),	// diff
-	elementfunc("reference", StartBCReference, EndNone),	// diff
-	elementfunc("set", StartBCSet, EndNone),				// diff
-	elementfunc("clipboard", StartBCClipboard, EndNone),	// diff, common for closure clipboards
-	elementfunc("", NULL, NULL)
+	//elementfunc(_T("project"), StartProject, EndNone),
+	elementfunc(_T("name"), StartNone, EndName),
+	elementfunc(_T("comment"), StartNone, EndComment),
+	elementfunc(_T("author"), StartNone, EndAuthor),
+	elementfunc(_T("value"), StartNone, EndValue),
+	elementfunc(_T("regnode"), StartRegNode, EndNone),
+	elementfunc(_T("attribute"), StartAttribute, EndNone),
+	elementfunc(_T("constraint"), StartNone, EndConstraint),
+	elementfunc(_T("folder"), StartFolder, EndNone),
+	elementfunc(_T("model"), StartModel, EndNone),
+	elementfunc(_T("atom"), StartAtom, EndNone),
+	elementfunc(_T("connection"), StartConnection, EndNone),
+	elementfunc(_T("connpoint"), StartBCConnPoint, EndNone),	// diff
+	elementfunc(_T("reference"), StartBCReference, EndNone),	// diff
+	elementfunc(_T("set"), StartBCSet, EndNone),				// diff
+	elementfunc(_T("clipboard"), StartBCClipboard, EndNone),	// diff, common for closure clipboards
+	elementfunc(_T(""), NULL, NULL)
 };
 
 // ------- Element Handlers
 void CMgaParser::StartBCClipboard(const attributes_type &attributes)
 {
 	ASSERT( project != NULL );
-	ASSERT( GetPrevName() == "start" );
+	ASSERT( GetPrevName() == _T("start") );
 	ASSERT( GetPrevious().object != NULL );
 
 	const CComObjPtr<IUnknown> &obj = GetPrevious().object;
@@ -194,18 +194,18 @@
 	CComObjPtr<IMgaFolder> folder;
 
 	if( SUCCEEDED(obj.QueryInterface(model)) )
-		GetCurrent().name = "model";
+		GetCurrent().name = _T("model");
 	else if( SUCCEEDED(obj.QueryInterface(folder)) )
-		GetCurrent().name = "folder";
+		GetCurrent().name = _T("folder");
 	else
 		HR_THROW(E_INVALID_FILENAME);
 
-	const std::string *ver = GetByNameX(attributes, "closureversion");
+	const std::tstring *ver = GetByNameX(attributes, _T("closureversion"));
 
 	ASSERT( ver);
 	ASSERT( ver->compare(m_clVerStr) == 0);
 
-	const std::string *acceptingkinds = GetByNameX(attributes, "acceptingkind");
+	const std::tstring *acceptingkinds = GetByNameX(attributes, _T("acceptingkind"));
 	if( acceptingkinds != NULL)
 	{
 		CComBstrObj kind_name;
@@ -223,21 +223,21 @@
 		}
 			
 		// check if the accepting kind exists among the accepting kinds
-		std::string kind_nm;
+		std::tstring kind_nm;
 		CopyTo( kind_name, kind_nm);
 
-		if( acceptingkinds->empty()) // if "" token avoid check
+		if( acceptingkinds->empty()) // if _T("") token avoid check
 		{
-			CComBSTR bstr("[Parser] \"clipboard\" element has empty \"acceptingkind\" attribute.");
+			CComBSTR bstr(L"[Parser] \"clipboard\" element has empty \"acceptingkind\" attribute.");
 			if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_WARNING));
 		}
 		else if( !findExact( *acceptingkinds, kind_nm))
 		{
-			CComBSTR bstr("[Parser] Target kind \"");
+			CComBSTR bstr(L"[Parser] Target kind \"");
 			bstr.Append( kind_nm.c_str());
-			bstr.Append("\" not found among accepting kinds: \"");
+			bstr.Append(L"\" not found among accepting kinds: \"");
 			bstr.Append( acceptingkinds->c_str());
-			bstr.Append("\". If you'd like to avoid this check remove or modify to \"\" the \"acceptingkind\" attribute of \"clipboard\" element in an editor.");
+			bstr.Append(L"\". If you'd like to avoid this check remove or modify to \"\" the \"acceptingkind\" attribute of \"clipboard\" element in an editor.");
 			if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
 			HR_THROW(E_INVALID_MGA);
 		}
@@ -248,10 +248,10 @@
 
 void CMgaParser::ResolveClosure1Derivation(const attributes_type &attributes, deriv_type &deriv)
 {
-	const std::string *s = GetByNameX(attributes, "derivedfrom");
+	const std::tstring *s = GetByNameX(attributes, _T("derivedfrom"));
 	if( s == NULL )
 	{
-		s = GetByNameX(attributes, "closurelibderivedfrom");
+		s = GetByNameX(attributes, _T("closurelibderivedfrom"));
 		if( s == NULL)
 		{
 			deriv.from.Release();
@@ -259,7 +259,7 @@
 		}
 
 		CComObjPtr<IMgaObject> obj;
-		COMTHROW( project->get_ObjectByPath( PutInBstr( *s), PutOut( obj)) );
+            COMTHROW( project->get_ObjectByPath( PutInBstr( *s), PutOut( obj)) );
 		if ( obj)
 			COMTHROW( obj.QueryInterface( deriv.from));
 		else // if nonunique is allowed
@@ -274,11 +274,11 @@
 				CComBSTR bstr, id, nm;
 				COMTHROW( obj->get_ID( &id));
 				COMTHROW( obj->get_Name( &nm));
-				bstr.Append("[Closure Parser] Name ambiguity found. Selected: <A HREF=\"mga:");
+				bstr.Append(L"[Closure Parser] Name ambiguity found. Selected: <A HREF=\"mga:");
 				bstr.AppendBSTR( id);
-				bstr.Append("\">");
+				bstr.Append(L"\">");
 				bstr.AppendBSTR( nm);
-				bstr.Append("</A> as basetype. Search path used: ");
+				bstr.Append(L"</A> as basetype. Search path used: ");
 				bstr.Append( makeViewable(*s).c_str());
 
 				COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
@@ -299,26 +299,26 @@
 			throw pass_exception();
 	}
 
-	s = GetByNameX(attributes, "isinstance");
-	deriv.isinstance = ( s != NULL && *s == "yes" ) ? VARIANT_TRUE : VARIANT_FALSE;
+	s = GetByNameX(attributes, _T("isinstance"));
+	deriv.isinstance = ( s != NULL && *s == _T("yes") ) ? VARIANT_TRUE : VARIANT_FALSE;
 
-	s = GetByNameX(attributes, "isprimary");
-	deriv.isprimary = ( s != NULL && *s == "no" ) ? false : true;
+	s = GetByNameX(attributes, _T("isprimary"));
+	deriv.isprimary = ( s != NULL && *s == _T("no") ) ? false : true;
 }
 
 
 void CMgaParser::StartBCConnPoint(const attributes_type &attributes)
 {
-	ASSERT( GetPrevName() == "connection" );
+	ASSERT( GetPrevName() == _T("connection") );
 	CComObjPtr<IMgaConnection> conn;
 	GetPrevObj(conn);
 
-	if( GetPrevious().exstrinfo == "skip" || GetByName(attributes, "isbound") == "yes" ) return;
+	if( GetPrevious().exstrinfo == _T("skip") || GetByName(attributes, _T("isbound")) == _T("yes") ) return;
 
 	CComObjPtr<IMgaFCO> target;
 
 	// prefer the closurelibtarget over the target:
-	const std::string *libtg = GetByNameX(attributes, "closurelibtarget");
+	const std::tstring *libtg = GetByNameX(attributes, _T("closurelibtarget"));
 	if ( libtg != NULL)
 	{
 		CComObjPtr<IMgaObject> obj;
@@ -327,7 +327,7 @@
 			COMTHROW( obj.QueryInterface( target));
 		else // if nonunique is allowed
 		{
-			COMTHROW( project->get_NthObjectByPath( 0, PutInBstr( *libtg), PutOut( obj)) );
+                  COMTHROW( project->get_NthObjectByPath( 0, PutInBstr( *libtg), PutOut( obj)) );
 			if( obj)
 				COMTHROW( obj.QueryInterface( target));
 
@@ -337,11 +337,11 @@
 				CComBSTR bstr, id, nm;
 				COMTHROW( obj->get_ID( &id));
 				COMTHROW( obj->get_Name( &nm));
-				bstr.Append("[Closure Parser] Name ambiguity found. Selected: <A HREF=\"mga:");
+				bstr.Append(L"[Closure Parser] Name ambiguity found. Selected: <A HREF=\"mga:");
 				bstr.AppendBSTR( id);
-				bstr.Append("\">");
+				bstr.Append(L"\">");
 				bstr.AppendBSTR( nm);
-				bstr.Append("</A> as connection target. Search path used: ");
+				bstr.Append(L"</A> as connection target. Search path used: ");
 				bstr.Append( makeViewable(*libtg).c_str());
 
 				COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
@@ -349,7 +349,7 @@
 		}
 	}
 
-	const std::string *tg = GetByNameX(attributes, "target");
+	const std::tstring *tg = GetByNameX(attributes, _T("target"));
 	if( tg != NULL && libtg == NULL) // valid info in target iff no closurelibtarget token
 	{
 		LookupByID( *tg, target);
@@ -362,7 +362,7 @@
 	CComObjPtr<IMgaFCOs> coll;
 	COMTHROW(coll.CoCreateInstance(L"Mga.MgaFCOs"));
 
-	const std::string *s = GetByNameX(attributes, "refs");
+	const std::tstring *s = GetByNameX(attributes, _T("refs"));
 	if( s != NULL )
 	{
 		int pos = s->find_first_not_of(' ', 0);
@@ -375,7 +375,7 @@
 			ASSERT( pos2 > pos );
 
 			CComObjPtr<IMgaFCO> ref;
-			LookupByID(std::string(*s, pos, pos2-pos), ref);
+			LookupByID(std::tstring(*s, pos, pos2-pos), ref);
 
 			if( ref == NULL )
 				throw pass_exception();
@@ -388,7 +388,7 @@
 
 	CComObjPtr<IMgaConnPoint> connpoint;
 
-	COMTHROW( conn->AddConnPoint(PutInBstr(GetByName(attributes, "role")), 0,	// FIXME: multiplicity
+	COMTHROW( conn->AddConnPoint(PutInBstr(GetByName(attributes, _T("role"))), 0,	// FIXME: multiplicity
 		target, coll, PutOut(connpoint)) );
 }
 
@@ -401,7 +401,7 @@
 
 	CComObjPtr<IMgaFCO> referred;
 
-	const std::string *s = GetByNameX(attributes, "referred");
+	const std::tstring *s = GetByNameX(attributes, _T("referred"));
 	if( s != NULL )
 	{
 		LookupByID(*s, referred);
@@ -411,7 +411,7 @@
 	}
 	else // by ZolMol
 	{
-		s = GetByNameX(attributes, "closurelibreferred");
+		s = GetByNameX(attributes, _T("closurelibreferred"));
 		if( s != NULL)
 		{
 			CComObjPtr<IMgaObject> obj;
@@ -430,11 +430,11 @@
 					CComBSTR bstr, id, nm;
 					COMTHROW( obj->get_ID( &id));
 					COMTHROW( obj->get_Name( &nm));
-					bstr.Append("[Closure Parser] Name ambiguity found. Selected: <A HREF=\"mga:");
+					bstr.Append(L"[Closure Parser] Name ambiguity found. Selected: <A HREF=\"mga:");
 					bstr.AppendBSTR( id);
-					bstr.Append("\">");
+					bstr.Append(L"\">");
 					bstr.AppendBSTR( nm);
-					bstr.Append("</A> as library reference. Search path used: ");
+					bstr.Append(L"</A> as library reference. Search path used: ");
 					bstr.Append( makeViewable(*s).c_str());
 
 					COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
@@ -443,7 +443,7 @@
 		}
 	}
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -456,7 +456,7 @@
 		else
 		{
 			CComObjPtr<IMgaMetaFCO> meta;
-			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 				OBJTYPE_REFERENCE, PutOut(meta)) );
 			ASSERT( meta != NULL );
 
@@ -466,14 +466,14 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_REFERENCE,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_REFERENCE,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -501,7 +501,7 @@
 	}
 	ASSERT( fco != NULL );
 
-	if( !(GetByName(attributes, "isbound") == "yes") && referred != NULL )
+	if( !(GetByName(attributes, _T("isbound")) == _T("yes")) && referred != NULL )
 	{
 		CComObjPtr<IMgaReference> ref;
 		COMTHROW( fco.QueryInterface(ref) );
@@ -523,7 +523,7 @@
 
 	std::list< CComObjPtr<IMgaFCO> > members;//slist
 
-	const std::string *s = GetByNameX(attributes, "members");
+	const std::tstring *s = GetByNameX(attributes, _T("members"));
 	if( s != NULL )
 	{
 		int pos = s->find_first_not_of(' ', 0);
@@ -536,7 +536,7 @@
 			ASSERT( pos2 > pos );
 
 			CComObjPtr<IMgaFCO> member;
-			LookupByID(std::string(*s, pos, pos2-pos), member);
+			LookupByID(std::tstring(*s, pos, pos2-pos), member);
 
 			if( member == NULL )
 				throw pass_exception();
@@ -547,7 +547,7 @@
 		}
 	}
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -560,7 +560,7 @@
 		else
 		{
 			CComObjPtr<IMgaMetaFCO> meta;
-			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 				OBJTYPE_SET, PutOut(meta)) );
 			ASSERT( meta != NULL );
 
@@ -570,14 +570,14 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_SET,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_SET,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -610,7 +610,7 @@
 	CComObjPtr<IMgaSet> mgaset;
 	COMTHROW( fco.QueryInterface(mgaset) );
 
-	if( !(GetByName(attributes, "isbound") == "yes") ) {
+	if( !(GetByName(attributes, _T("isbound")) == _T("yes")) ) {
 		COMTHROW( mgaset->RemoveAll() ); //by ZolMol: if not bound then the members are different, remove the inherited members
 		std::list< CComObjPtr<IMgaFCO> >::iterator i = members.begin();//slist
 		while( i != members.end() )

Modified: trunk/GME/Parser/MgaParserClosureHelper.cpp
==============================================================================
--- trunk/GME/Parser/MgaParserClosureHelper.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MgaParserClosureHelper.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -11,7 +11,7 @@
 #include "helper.h"
 
 // goes up in the object hierarchy as indicated by the number of '..'s in 'originalPath' and returns the new parent and remaining path info
-void CMgaParser::stepUpInHierarchy( CComObjPtr<IMgaObject>& pCurrentObj, const std::string& originalPath, CComObjPtr<IMgaObject>& pNewParent, std::string& remainingPath)
+void CMgaParser::stepUpInHierarchy( CComObjPtr<IMgaObject>& pCurrentObj, const std::tstring& originalPath, CComObjPtr<IMgaObject>& pNewParent, std::tstring& remainingPath)
 {
 	CComObjPtr<IMgaFCO> cur_fco;
 	CComObjPtr<IMgaFolder> cur_fld;
@@ -21,9 +21,9 @@
 
 	bool isfco = (cur_fco != NULL);
 
-	std::string m = originalPath;
+	std::tstring m = originalPath;
 	
-	while( m.substr(0,4) == "/@..")
+	while( m.substr(0,4) == _T("/@.."))
 	{
 		CComObjPtr<IMgaModel> mod;
 		if( isfco) COMTHROW( cur_fco->get_ParentModel( PutOut( mod)) );
@@ -46,7 +46,7 @@
 			}
 			else // rootfolder reached: wrong path information
 			{
-				remainingPath = "";
+				remainingPath = _T("");
 				return; // pNewParent remains empty
 			}
 		}
@@ -60,17 +60,17 @@
 	else if( cur_fld)     pNewParent = cur_fld;
 }
 
-void CMgaParser::findFCOWithRelPathAndGUID( CComObjPtr<IMgaObject> obj_rel_to, const std::string& relpath , const std::string& guid, CComObjPtr<IMgaFCO>& pFoundFCO)
+void CMgaParser::findFCOWithRelPathAndGUID( CComObjPtr<IMgaObject> obj_rel_to, const std::tstring& relpath , const std::tstring& guid, CComObjPtr<IMgaFCO>& pFoundFCO)
 {
 	// rel_path gives an indication how much to step up in the hierarchy
 	CComObjPtr<IMgaObject> new_parent;
-	stepUpInHierarchy( obj_rel_to, relpath, new_parent, std::string());
+	stepUpInHierarchy( obj_rel_to, relpath, new_parent, std::tstring());
 	if( new_parent) // valid parent
 		findFCOWithGUIDInTree( new_parent, guid, pFoundFCO);
 }
 
 
-void CMgaParser::findFCOWithGUID( CComObjPtr<IMgaObject> prev, const std::string& guid, CComObjPtr<IMgaFCO>& pFoundFco)
+void CMgaParser::findFCOWithGUID( CComObjPtr<IMgaObject> prev, const std::tstring& guid, CComObjPtr<IMgaFCO>& pFoundFco)
 {
 	CComObjPtr<IMgaModel> m;
 	CComObjPtr<IMgaFolder> f;
@@ -101,7 +101,7 @@
 
 }
 
-void CMgaParser::findFCOWithGUIDInTree( CComObjPtr<IMgaObject> pParent, const std::string& guid, CComObjPtr<IMgaFCO>& pFoundFCO)
+void CMgaParser::findFCOWithGUIDInTree( CComObjPtr<IMgaObject> pParent, const std::tstring& guid, CComObjPtr<IMgaFCO>& pFoundFCO)
 {
 #if(1)
 	// breadth-first
@@ -200,9 +200,9 @@
 	if( !m_mergeAllowed) return false; 
 
 	// TODO : use role to narrow search
-	//std::string role_in_clipdata = GetByName(p_attributes, "role");
+	//std::tstring role_in_clipdata = GetByName(p_attributes, "role");
 
-	std::string id_in_clipdata = GetByName(p_attributes, "closureguid"); // guid
+	std::tstring id_in_clipdata = GetByName(p_attributes, _T("closureguid")); // guid
 	ASSERT( id_in_clipdata.length() == GLOBAL_ID_LEN); 
 
 	bool found = false;
@@ -278,12 +278,12 @@
 	if( !found                    // id not stored in registry (or different ids found only)
 	   && p_typeRequested != 'C') // but the names may allow us to merge
 	{                             // except if Connection (usually having same names)
-		const std::string* s = 0;
-		s = GetByNameX(p_attributes, "closurename");
-		if( s != 0 && s->compare("") != 0)
+		const std::tstring* s = 0;
+		s = GetByNameX(p_attributes, _T("closurename"));
+		if( s != 0 && s->compare(_T("")) != 0)
 		{
 			CComObjPtr<IMgaObject> obj2;
-			findObjOnRelPath( CComObjPtr<IMgaObject>(p_parent), *s, obj2, "mergable object");
+			findObjOnRelPath( CComObjPtr<IMgaObject>(p_parent), *s, obj2, _T("mergable object"));
 			if( obj2) COMTHROW( obj2.QueryInterface( p_obj));
 			found = p_obj != 0;
 		}
@@ -294,8 +294,8 @@
 bool CMgaParser::findObject( const CComObjPtr<IMgaModel>& p_prev, const attributes_type& p_attributes, CComObjPtr<IMgaFCO>& p_obj, const char p_typeRequested)
 {
 	CComObjPtrVector<IMgaFCO> chld;
-	if( GetByNameX( p_attributes, "kind"))
-		COMTHROW( p_prev->GetChildrenOfKind( PutInBstrAttr(p_attributes, "kind"), PutOut( chld)));
+	if( GetByNameX( p_attributes, _T("kind")))
+		COMTHROW( p_prev->GetChildrenOfKind( PutInBstrAttr(p_attributes, _T("kind")), PutOut( chld)));
 	else
 		COMTHROW(p_prev->get_ChildFCOs( PutOut( chld)));
 
@@ -306,8 +306,8 @@
 {
 	CComObjPtrVector<IMgaFCO> chld;
 	
-	if( GetByNameX( p_attributes, "kind"))
-		COMTHROW( p_prev->GetChildrenOfKind( PutInBstrAttr(p_attributes, "kind"), PutOut( chld)));
+	if( GetByNameX( p_attributes, _T("kind")))
+		COMTHROW( p_prev->GetChildrenOfKind( PutInBstrAttr(p_attributes, _T("kind")), PutOut( chld)));
 	else
 		COMTHROW(p_prev->get_ChildFCOs( PutOut( chld)));
 
@@ -322,9 +322,9 @@
 	CComObjPtrVector<IMgaFolder> chld;
 	COMTHROW(p_prev->get_ChildFolders( PutOut( chld)));
 
-	std::string req_kind = GetByName( p_attributes, "kind");
+	std::tstring req_kind = GetByName( p_attributes, _T("kind"));
 
-	std::string id_in_clipdata = GetByName(p_attributes, "closureguid");
+	std::tstring id_in_clipdata = GetByName(p_attributes, _T("closureguid"));
 	ASSERT( id_in_clipdata.length() == GLOBAL_ID_LEN);
 
 	bool found = false;
@@ -349,24 +349,24 @@
 	}
 	if( !found)  // id not stored in registry (or different ids found only)
 	{           // but the names may allow us to merge
-		const std::string* s = 0;
-		s = GetByNameX(p_attributes, "closurename");
-		if( s != 0 && s->compare("") != 0)
+		const std::tstring* s = 0;
+		s = GetByNameX(p_attributes, _T("closurename"));
+		if( s != 0 && s->compare(_T("")) != 0)
 		{
 			CComObjPtr<IMgaObject> obj2;
-			findObjOnRelPath( CComObjPtr<IMgaObject>(p_prev), *s, obj2, "mergable object");
+			findObjOnRelPath( CComObjPtr<IMgaObject>(p_prev), *s, obj2, _T("mergable object"));
 			if( obj2) COMTHROW( obj2.QueryInterface( p_folder));
 			found = p_folder != 0;
 		}
 	}
 	return found;
 }
-void CMgaParser::findObjOnAbsPath( CComObjPtr<IMgaProject> p_project, const std::string& p_absPath , CComObjPtr<IMgaObject>& p_obj, const std::string& text)
+void CMgaParser::findObjOnAbsPath( CComObjPtr<IMgaProject> p_project, const std::tstring& p_absPath , CComObjPtr<IMgaObject>& p_obj, const std::tstring& text)
 {
-	COMTHROW( p_project->get_ObjectByPath( PutInBstr( p_absPath), PutOut( p_obj)) );
+	COMTHROW( p_project->get_ObjectByPath( _bstr_t(p_absPath.c_str()), PutOut( p_obj)) );
 	if( !p_obj) // if nonunique is allowed
 	{
-		COMTHROW( p_project->get_NthObjectByPath( 0, PutInBstr( p_absPath), PutOut( p_obj)) );
+		COMTHROW( p_project->get_NthObjectByPath( 0, _bstr_t(p_absPath.c_str()), PutOut( p_obj)) );
 
 		if( p_obj)
 		{
@@ -375,7 +375,7 @@
 			if( m_GME) 
 			{
 				CComBSTR bstr;
-				bstr.Append("Name ambiguity, selected: ");
+				bstr.Append(_T("Name ambiguity, selected: "));
 				bstr.AppendBSTR( makeLink( p_obj));
 				
 				if( !text.empty())
@@ -392,7 +392,7 @@
 	}
 }
 
-void CMgaParser::findObjOnRelPath( CComObjPtr<IMgaObject> obj_rel_to, const std::string& relpath , CComObjPtr<IMgaObject>& obj, const std::string& text)
+void CMgaParser::findObjOnRelPath( CComObjPtr<IMgaObject> obj_rel_to, const std::tstring& relpath , CComObjPtr<IMgaObject>& obj, const std::tstring& text)
 {
 	ASSERT( !relpath.empty());
 	ASSERT( obj_rel_to);
@@ -405,9 +405,9 @@
 
 	bool isfco = (cur_fco != NULL);
 
-	std::string m = relpath;
+	std::tstring m = relpath;
 	
-	while( m.substr(0,4) == "/@..")
+	while( m.substr(0,4) == _T("/@.."))
 	{
 		CComObjPtr<IMgaModel> mod;
 		if( isfco) COMTHROW( cur_fco->get_ParentModel( PutOut( mod)) );
@@ -478,17 +478,17 @@
 							   , CComObjPtr<IMgaObject>& place
 							)
 {
-	const std::string *nm = GetByNameX(attributes, "closurepath");
+	const std::tstring *nm = GetByNameX(attributes, _T("closurepath"));
 	if( nm != NULL)
 	{
-		if( nm->compare("") == 0)
+		if( nm->compare(_T("")) == 0)
 		{
 			place = m_target;
 			return true;
 		}
 		else
 		{
-			findObjOnRelPath( m_target, *nm, place, "place");
+			findObjOnRelPath( m_target, *nm, place, _T("place"));
 			if( place)
 				return true;
 			else
@@ -520,9 +520,9 @@
 		place = m_target;//<!> let's try this
 		
 		CComBSTR bstr("Correct place not found for object: ");
-		bstr.Append( makeNameViewable( GetByName( attributes, "closurename")).c_str());
+		bstr.Append( makeNameViewable( GetByName( attributes, _T("closurename"))).c_str());
 		bstr.Append(". Search path used: ");
-		bstr.Append( makeViewable( GetByName(attributes, "closurepath")).c_str());
+		bstr.Append( makeViewable( GetByName(attributes, _T("closurepath"))).c_str());
 		bstr.Append(". Trying to insert into the target object: ");
 		bstr.AppendBSTR( makeLink( place));
 		bstr.Append(".");
@@ -539,7 +539,7 @@
 {
 	CComPtr<IGMEOLEApp> gme;
 	if ( (project != NULL)) {		
-		CComBSTR bstrName("GME.Application");
+		CComBSTR bstrName(L"GME.Application");
 		CComPtr<IMgaClient> pClient;
 		HRESULT hr = project->GetClientByName(bstrName, &pClient);
 		if (SUCCEEDED(hr) && pClient) {
@@ -646,15 +646,15 @@
 
 void CMgaParser::tryToFindMissedReferreds()
 {
-	std::map< CComObjPtr<IMgaFCO>, std::string, CompareCComObj >::iterator it = m_notFoundReferredObject.begin();
-	std::map< CComObjPtr<IMgaFCO>, std::string, CompareCComObj >::iterator itend = m_notFoundReferredObject.end();
+	std::map< CComObjPtr<IMgaFCO>, std::tstring, CompareCComObj >::iterator it = m_notFoundReferredObject.begin();
+	std::map< CComObjPtr<IMgaFCO>, std::tstring, CompareCComObj >::iterator itend = m_notFoundReferredObject.end();
 	for( ; it != itend; ++it)
 	{
 		if( !it->first) continue;
 		bool error = false;
 
 		CComObjPtr<IMgaObject> target;
-		findObjOnRelPath( CComObjPtr<IMgaObject>( it->first), it->second, target, "referred object");
+		findObjOnRelPath( CComObjPtr<IMgaObject>( it->first), it->second, target, _T("referred object"));
 		if( target)
 		{
 			CComObjPtr<IMgaReference> ref;
@@ -693,8 +693,8 @@
 
 void CMgaParser::tryToFindMissedSetMembers()
 {
-	std::map< CComObjPtr<IMgaFCO>, std::vector< std::string >, CompareCComObj >::iterator it = m_notFoundSetMembers.begin();
-	std::map< CComObjPtr<IMgaFCO>, std::vector< std::string >, CompareCComObj >::iterator itend = m_notFoundSetMembers.end();
+	std::map< CComObjPtr<IMgaFCO>, std::vector< std::tstring >, CompareCComObj >::iterator it = m_notFoundSetMembers.begin();
+	std::map< CComObjPtr<IMgaFCO>, std::vector< std::tstring >, CompareCComObj >::iterator itend = m_notFoundSetMembers.end();
 	for( ; it != itend; ++it)
 	{
 		if( !it->first || it->second.empty()) continue;
@@ -704,15 +704,15 @@
 
 		if( !set) continue;
 
-		std::vector< std::string >::iterator member_it = it->second.begin();
-		std::vector< std::string >::iterator member_it_end = it->second.end();
+		std::vector< std::tstring >::iterator member_it = it->second.begin();
+		std::vector< std::tstring >::iterator member_it_end = it->second.end();
 		for( ; member_it != member_it_end; ++member_it)
 		{
 			if( member_it->empty()) continue;
 
 			bool error = false;
 			CComObjPtr<IMgaObject> member;
-			findObjOnRelPath( CComObjPtr<IMgaObject>( it->first), *member_it, member, "set member");
+			findObjOnRelPath( CComObjPtr<IMgaObject>( it->first), *member_it, member, _T("set member"));
 			if( member)
 			{
 				CComObjPtr<IMgaFCO> fco_member;
@@ -785,11 +785,11 @@
 
 void CMgaParser::msgSC( CComBSTR& msg, msgtype_enum type)
 {
-	static const char * sc_text = "[Smartcopy Parser] ";
+	static const TCHAR * sc_text = _T("[Smartcopy Parser] ");
 	CComBSTR m2;
-	std::string t;
+	std::tstring t;
 	CopyTo( msg, t);
-	if( t.substr( 0, strlen( sc_text)) != sc_text)
+	if( t.substr( 0, _tcslen( sc_text)) != sc_text)
 	{
 		m2.Append( sc_text);
 		m2.AppendBSTR( msg);

Modified: trunk/GME/Parser/MgaParserSC.cpp
==============================================================================
--- trunk/GME/Parser/MgaParserSC.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/MgaParserSC.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -23,7 +23,7 @@
 		CloseAll();
 
 		COMTHROW( progress.CoCreateInstance(L"Mga.MgaProgressDlg") );
-		COMTHROW( progress->SetTitle(PutInBstr("Importing SmartCopied XML data...")) );
+		COMTHROW( progress->SetTitle(_bstr_t(L"Importing SmartCopied XML data...")) );
 		COMTHROW( progress->StartProgressDialog(NULL) );
 
 		CComObjPtr<IMgaProject> p;
@@ -47,7 +47,7 @@
 		m_mergeAllowed = (options & MERGE) != 0;
 		m_target = target;
 		m_resolveDerFuncPtr = &CMgaParser::ResolveClosure4Derivation;
-		m_clVerStr = "4";//end
+		m_clVerStr = _T("4");//end
 
 		project_prefs = project_prefs_orig | MGAPREF_IGNORECONNCHECKS;
 		COMTHROW( p->put_Preferences(project_prefs) );
@@ -80,7 +80,7 @@
 			ranges.push_front(range_type());
 			ranges.front().begin = 1;
 			ranges.front().end = (counter_type)-1;
-			ranges.front().previous.name = "start";
+			ranges.front().previous.name = _T("start");
 			ranges.front().previous.object = target;
 			skip_element_level = 0;
 			
@@ -101,7 +101,7 @@
 				// FIXME: better algorithm for infinite loop
 				if( ++pass_count >= 1 )//<!> reduced from 100 to 5
 				{
-					msgSC( CComBSTR("Exception during parsing."), MSG_ERROR);
+					msgSC( CComBSTR(L"Exception during parsing."), MSG_ERROR);
 					HR_THROW(E_TOOMANYPASSES);
 				}
 
@@ -113,8 +113,8 @@
 
 			if( isNeedFor2ndStep())
 			{
-				CComBSTR bstr1("Some objects were not found during parsing.");
-				CComBSTR bstr2("Invoking 2nd step...");
+				CComBSTR bstr1(L"Some objects were not found during parsing.");
+				CComBSTR bstr2(L"Invoking 2nd step...");
 				msgSC( bstr1, MSG_ERROR);
 				msgSC( bstr2, MSG_INFO);
 				
@@ -164,41 +164,41 @@
 
 CMgaParser::elementfunc CMgaParser::elementfuncs_scmga[] = // special handlers for all elements
 {
-	//elementfunc("project",  StartProject,      EndNone),
-	elementfunc("name",       StartNone,         EndSCName),
-	//elementfunc("comment",  StartNone,         EndComment),
-	//elementfunc("author",   StartNone,         EndAuthor),
-	elementfunc("value",      StartNone,         EndSCValue),
-	elementfunc("regnode",    StartSCRegNode,    EndSCRegNode),
-	elementfunc("attribute",  StartSCAttribute,  EndNone),
-	elementfunc("constraint", StartNone,         EndSCConstraint),
-	elementfunc("folder",     StartSCFolder,     EndNone),
-	elementfunc("model",      StartSCModel,      EndNone),
-	elementfunc("atom",       StartSCAtom,       EndNone),
-	elementfunc("connection", StartSCConnection, EndSCConnection),
-	elementfunc("connpoint",  StartSCConnPoint,  EndNone),
-	elementfunc("reference",  StartSCReference,  EndNone),
-	elementfunc("set",        StartSCSet,        EndNone),
-	elementfunc("clipboard",  StartBCClipboard,  EndNone),	// common for closures
-	elementfunc("", NULL, NULL)
+	//elementfunc(_T("project"),  StartProject,      EndNone),
+	elementfunc(_T("name"),       StartNone,         EndSCName),
+	//elementfunc(_T("comment"),  StartNone,         EndComment),
+	//elementfunc(_T("author"),   StartNone,         EndAuthor),
+	elementfunc(_T("value"),      StartNone,         EndSCValue),
+	elementfunc(_T("regnode"),    StartSCRegNode,    EndSCRegNode),
+	elementfunc(_T("attribute"),  StartSCAttribute,  EndNone),
+	elementfunc(_T("constraint"), StartNone,         EndSCConstraint),
+	elementfunc(_T("folder"),     StartSCFolder,     EndNone),
+	elementfunc(_T("model"),      StartSCModel,      EndNone),
+	elementfunc(_T("atom"),       StartSCAtom,       EndNone),
+	elementfunc(_T("connection"), StartSCConnection, EndSCConnection),
+	elementfunc(_T("connpoint"),  StartSCConnPoint,  EndNone),
+	elementfunc(_T("reference"),  StartSCReference,  EndNone),
+	elementfunc(_T("set"),        StartSCSet,        EndNone),
+	elementfunc(_T("clipboard"),  StartBCClipboard,  EndNone),	// common for closures
+	elementfunc(_T(""), NULL, NULL)
 };
 
 void CMgaParser::ResolveClosure4Derivation(const attributes_type &attributes, deriv_type &deriv)
 {
-	const std::string *s = GetByNameX(attributes, "derivedfrom");
+	const std::tstring *s = GetByNameX(attributes, _T("derivedfrom"));
 	if( s == NULL )
 	{
-		s = GetByNameX(attributes, "closurelibderivedfrom");
+		s = GetByNameX(attributes, _T("closurelibderivedfrom"));
 		if( s != NULL)
 		{
 			CComObjPtr<IMgaObject> obj;
-			findObjOnAbsPath( project, *s, obj, "archetype");
+			findObjOnAbsPath( project, *s, obj, _T("archetype"));
 			if( obj)
 				COMTHROW( obj.QueryInterface( deriv.from));
 			else
 			{
-				CComBSTR bstr("Archetype can not be found in library. Basetype lost. ");
-				bstr.Append("Search path used: ");
+				CComBSTR bstr(L"Archetype can not be found in library. Basetype lost. ");
+				bstr.Append(L"Search path used: ");
 				bstr.Append( makeViewable(*s).c_str());
 				msgSC( bstr, MSG_ERROR);
 			}
@@ -206,15 +206,15 @@
 		}
 		else //if( s == NULL)
 		{
-			const std::string* g;
-			g = GetByNameX( attributes, "smartDerivedFromGUID");
-			s = GetByNameX( attributes, "closure2derivedfrom");
+			const std::tstring* g;
+			g = GetByNameX( attributes, _T("smartDerivedFromGUID"));
+			s = GetByNameX( attributes, _T("closure2derivedfrom"));
 
-			std::string rel_path_changed = s? *s: "";
+			std::tstring rel_path_changed = s? *s: _T("");
 			// since the derfrom is calculated relatively to the fco, 
 			// we have to modify the path so that it could be found
 			// with a search starting from its container
-			if( rel_path_changed.substr(0, 4) == "/@..")
+			if( rel_path_changed.substr(0, 4) == _T("/@.."))
 				rel_path_changed = rel_path_changed.substr(4);
 			// else: the object has similar name to its archetype
 			// else: the derfrom object cannot be inside the derived object
@@ -240,14 +240,14 @@
 			if( !deriv.from && s != NULL)
 			{
 				CComObjPtr<IMgaObject> obj;
-				findObjOnRelPath( CComObjPtr<IMgaObject>(place), rel_path_changed, obj, "archetype");
+				findObjOnRelPath( CComObjPtr<IMgaObject>(place), rel_path_changed, obj, _T("archetype"));
 
 				if( obj)
 					COMTHROW( obj.QueryInterface( deriv.from));
 				else // error report
 				{
-					CComBSTR bstr("Archetype can not be found. Basetype lost. ");
-					bstr.Append("Search path used: ");
+					CComBSTR bstr(L"Archetype can not be found. Basetype lost. ");
+					bstr.Append(L"Search path used: ");
 					bstr.Append( makeViewable(rel_path_changed).c_str());
 					msgSC( bstr, MSG_ERROR);
 				}
@@ -269,11 +269,11 @@
 			throw pass_exception();
 	}
 
-	s = GetByNameX(attributes, "isinstance");
-	deriv.isinstance = ( s != NULL && *s == "yes" ) ? VARIANT_TRUE : VARIANT_FALSE;
+	s = GetByNameX(attributes, _T("isinstance"));
+	deriv.isinstance = ( s != NULL && *s == _T("yes") ) ? VARIANT_TRUE : VARIANT_FALSE;
 
-	s = GetByNameX(attributes, "isprimary");
-	deriv.isprimary = ( s != NULL && *s == "no" ) ? false : true;
+	s = GetByNameX(attributes, _T("isprimary"));
+	deriv.isprimary = ( s != NULL && *s == _T("no") ) ? false : true;
 }
 
 // ------- Element Handlers
@@ -285,7 +285,7 @@
 	//ResolveDerivation(attributes, deriv);
 	(*this.*m_resolveDerFuncPtr)(attributes, deriv);
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -296,15 +296,15 @@
 			COMTHROW( prev->DeriveRootObject(deriv.from, deriv.isinstance, PutOut(conn)) );
 
 			// user info
-			CComBSTR msg = makeLink( conn, makeNameViewable( GetByName(attributes, "closurename")), true);
-			msg.Append( " connection derived from ");
+			CComBSTR msg = makeLink( conn, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
+			msg.Append( L" connection derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
 		}
 		else
 		{
 			CComObjPtr<IMgaMetaFCO> meta;
-			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+			COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 				OBJTYPE_CONNECTION, PutOut(meta)) );
 			ASSERT( meta != NULL );
 
@@ -314,15 +314,15 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_CONNECTION,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_CONNECTION,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -342,8 +342,8 @@
 			}
 
 			// user info
-			CComBSTR msg = makeLink( conn, makeNameViewable( GetByName(attributes, "closurename")), true);
-			msg.Append( " connection derived from ");
+			CComBSTR msg = makeLink( conn, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
+			msg.Append( L" connection derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
 		}
@@ -366,28 +366,28 @@
 					assignrelid(conn);
 
 					// user info
-					CComBSTR msg = makeLink( conn, makeNameViewable( GetByName(attributes, "closurename")));
-					msg.Append( " connection created.");
+					CComBSTR msg = makeLink( conn, makeNameViewable( GetByName(attributes, _T("closurename"))));
+					msg.Append( L" connection created.");
 					msgSC( msg, MSG_INFO);
 				}
 				else
 				{
 					// error, could not find a correct reference chain
-					CComBSTR bstr("Connection \"");
-					bstr.Append( makeNameViewable( GetByName(attributes, "closurename")).c_str());
-					bstr.Append("\": could not be created.");
+					CComBSTR bstr(L"Connection \"");
+					bstr.Append( makeNameViewable( GetByName(attributes, _T("closurename"))).c_str());
+					bstr.Append(L"\": could not be created.");
 					msgSC( bstr, MSG_ERROR);
 
 					bstr.Empty();
-					bstr.Append("   Reference chain involved: ");
-					if( !o1) bstr.Append( makeViewable( GetByName( attributes, "smart0RefChain" )).c_str());
-					else if( !o2) bstr.Append( makeViewable( GetByName( attributes, "smart1RefChain" )).c_str());
+					bstr.Append(L"   Reference chain involved: ");
+					if( !o1) bstr.Append( makeViewable( GetByName( attributes, _T("smart0RefChain") )).c_str());
+					else if( !o2) bstr.Append( makeViewable( GetByName( attributes, _T("smart1RefChain") )).c_str());
 					msgSC( bstr, MSG_ERROR);
 
 					bstr.Empty();
-					bstr.Append("   Target path used: ");
-					if( !o1) bstr.Append( makeViewable( GetByName( attributes, "smart0Target" )).c_str());
-					else if( !o2) bstr.Append( makeViewable( GetByName( attributes, "smart1Target" )).c_str());
+					bstr.Append(L"   Target path used: ");
+					if( !o1) bstr.Append( makeViewable( GetByName( attributes, _T("smart0Target") )).c_str());
+					else if( !o2) bstr.Append( makeViewable( GetByName( attributes, _T("smart1Target") )).c_str());
 					msgSC( bstr, MSG_ERROR);
 
 					// to safely pass through hard times (parsing internal connpoints, attributes, regnodes...
@@ -398,7 +398,7 @@
 					COMTHROW( prev->CreateChildObject(role, PutOut(conn)) );
 					assignrelid(conn);
 					
-					GetCurrent().exstrinfo = "handicapped";
+					GetCurrent().exstrinfo = _T("handicapped");
 				}
 			}
 			else // will skip contained elements/attribute values/regnode entries/constraints/name element
@@ -406,9 +406,9 @@
 				skip_inner_elements = true;
 
 				// user info
-				CComBSTR msg = "Merging ";
+				CComBSTR msg = L"Merging ";
 				msg.AppendBSTR(makeLink( conn));
-				msg.Append( " connection.");
+				msg.Append( L" connection.");
 				msgSC( msg, MSG_INFO);
 			}
 
@@ -417,26 +417,26 @@
 	ASSERT( conn != NULL );
 	GetCurrent().object = conn;
 
-	if( GetByName(attributes, "isbound") == "yes" 
+	if( GetByName(attributes, _T("isbound")) == _T("yes") 
 		|| skip_inner_elements) 
-		GetCurrent().exstrinfo = "skip";
+		GetCurrent().exstrinfo = _T("skip");
 
 	RegisterLookup(attributes, conn);
 }
 
 bool CMgaParser::findConnectionEnd
 		( CComObjPtr<IMgaObject> pPrev
-		, const std::string& isbound
-		, const std::string& role
-		, const std::string& targetGUID
-		, const std::string& targetPATH
-		, const std::string& refchainGUID
-		, const std::string& refchainPATH
+		, const std::tstring& isbound
+		, const std::tstring& role
+		, const std::tstring& targetGUID
+		, const std::tstring& targetPATH
+		, const std::tstring& refchainGUID
+		, const std::tstring& refchainPATH
 		, CComObjPtr<IMgaFCO>& pFoundObj
 		, CComObjPtr<IMgaFCOs>& pFoundRefChain
 		)
 {
-	std::vector< std::string> guid_closure_ref_vec;
+	std::vector< std::tstring> guid_closure_ref_vec;
 	if( !refchainGUID.empty())
 	{
 		int pos = refchainGUID.find_first_not_of(' ', 0);
@@ -449,12 +449,12 @@
 			ASSERT( pos2 > pos );
 
 			
-			guid_closure_ref_vec.push_back( std::string(refchainGUID, pos, pos2-pos));
+			guid_closure_ref_vec.push_back( std::tstring(refchainGUID, pos, pos2-pos));
 			pos = pos2+1;
 		}
 	}
 
-	std::vector< std::string> name_closure_ref_vec;
+	std::vector< std::tstring> name_closure_ref_vec;
 	if( !refchainPATH.empty())
 	{
 		int pos = refchainPATH.find_first_not_of(' ', 0);
@@ -467,7 +467,7 @@
 			ASSERT( pos2 > pos );
 
 			
-			name_closure_ref_vec.push_back( std::string(refchainPATH, pos, pos2-pos));
+			name_closure_ref_vec.push_back( std::tstring(refchainPATH, pos, pos2-pos));
 			pos = pos2+1;
 		}
 	}
@@ -544,7 +544,7 @@
 		CComObjPtr<IMgaObject> nx_obj;
 
 		// search based on closurerefs
-		findObjOnRelPath( CComObjPtr<IMgaObject>( pPrev), name_closure_ref_vec[0], nx_obj, "reference chain");
+		findObjOnRelPath( CComObjPtr<IMgaObject>( pPrev), name_closure_ref_vec[0], nx_obj, _T("reference chain"));
 		if( nx_obj) COMTHROW( nx_obj.QueryInterface( next_obj));
 
 		// we will build up the collection of references
@@ -612,7 +612,7 @@
 		if( !pFoundObj && !targetPATH.empty())
 		{
 			CComObjPtr<IMgaObject> t_target;
-			findObjOnRelPath( CComObjPtr<IMgaObject>( pPrev), targetPATH, t_target, "target");
+			findObjOnRelPath( CComObjPtr<IMgaObject>( pPrev), targetPATH, t_target, _T("target"));
 			if( t_target) COMTHROW( t_target.QueryInterface( pFoundObj));
 		}
 	}
@@ -629,23 +629,23 @@
 			, CComObjPtr<IMgaFCOs>& pFoundDstRefChain
 			)
 {
-	const char *role_attr []       = { "smart0Role"         , "smart1Role"         };
-	const char *targetGUID_attr [] = { "smart0TargetGUID"   , "smart1TargetGUID"   };
-	const char *target_attr []     = { "smart0Target"       , "smart1Target"       };
-	const char *refchainGUID_attr[]= { "smart0RefChainGUID" , "smart1RefChainGUID" };
-	const char *refchain_attr []   = { "smart0RefChain"     , "smart1RefChain"     };
-	const char *isbound_attr []    = { "smart0IsBound"      , "smart1IsBound"      };
+	const TCHAR *role_attr []       = { _T("smart0Role")         , _T("smart1Role")         };
+	const TCHAR *targetGUID_attr [] = { _T("smart0TargetGUID")   , _T("smart1TargetGUID")   };
+	const TCHAR *target_attr []     = { _T("smart0Target")       , _T("smart1Target")       };
+	const TCHAR *refchainGUID_attr[]= { _T("smart0RefChainGUID") , _T("smart1RefChainGUID") };
+	const TCHAR *refchain_attr []   = { _T("smart0RefChain")     , _T("smart1RefChain")     };
+	const TCHAR *isbound_attr []    = { _T("smart0IsBound")      , _T("smart1IsBound")      };
 
 	CComObjPtr<IMgaFCO> obj[2];
 	CComObjPtr<IMgaFCOs> coll[2];
 	for( int i = 0 ; i < 2; ++i)
 	{
-		std::string isbound         = GetByName( pAttributes, isbound_attr[i]);
-		std::string role            = GetByName( pAttributes, role_attr[i]);
-		std::string targetGUID      = GetByName( pAttributes, targetGUID_attr[i]);
-		std::string refchainGUID    = GetByName( pAttributes, refchainGUID_attr[i]);
-		std::string target          = GetByName( pAttributes, target_attr[i]);
-		std::string refchain        = GetByName( pAttributes, refchain_attr[i]);
+		std::tstring isbound         = GetByName( pAttributes, isbound_attr[i]);
+		std::tstring role            = GetByName( pAttributes, role_attr[i]);
+		std::tstring targetGUID      = GetByName( pAttributes, targetGUID_attr[i]);
+		std::tstring refchainGUID    = GetByName( pAttributes, refchainGUID_attr[i]);
+		std::tstring target          = GetByName( pAttributes, target_attr[i]);
+		std::tstring refchain        = GetByName( pAttributes, refchain_attr[i]);
 		findConnectionEnd( pPrev, isbound, role, targetGUID, target, refchainGUID, refchain, obj[i], coll[i]);
 	}
 
@@ -676,7 +676,7 @@
 
 	CComObjPtrVector<IMgaConnPoint> cps;
 	COMTHROW( fresh_conn->get_ConnPoints( PutOut( cps)));
-	if( cps.size() < 2 || GetCurrent().exstrinfo == "handicapped") // handicapped connection, error must have occurred
+	if( cps.size() < 2 || GetCurrent().exstrinfo == _T("handicapped")) // handicapped connection, error must have occurred
 	{
 		COMTHROW( fresh_conn->DestroyObject());
 		return;
@@ -700,7 +700,7 @@
 
 	CComObjPtr<IMgaFCO> referred;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -713,8 +713,8 @@
 			assignrelid(fco);
 
 			// user info
-			CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")), true);
-			msg.Append( " reference derived from ");
+			CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
+			msg.Append( _T(" reference derived from "));
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
 
@@ -728,7 +728,7 @@
 			if( !found)
 			{
 				CComObjPtr<IMgaMetaFCO> meta;
-				COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+				COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 					OBJTYPE_REFERENCE, PutOut(meta)) );
 				ASSERT( meta != NULL );
 
@@ -737,8 +737,8 @@
 				assignrelid(fco);
 
 				// user info
-				CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")));
-				msg.Append( " reference created.");
+				CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))));
+				msg.Append( _T(" reference created."));
 				msgSC( msg, MSG_INFO);
 			}
 			else // will skip contained elements/attribute values/regnode entries/constraints/name element
@@ -747,17 +747,17 @@
 				needs_target = isNullRef( fco);
 
 				// user info
-				CComBSTR msg = "Merging ";
+				CComBSTR msg = L"Merging ";
 				msg.AppendBSTR(makeLink( fco));
-				if( needs_target) msg.Append(" null");
-				msg.Append( " reference.");
+				if( needs_target) msg.Append(L" null");
+				msg.Append( L" reference.");
 				msgSC( msg, MSG_INFO);
 			}
 		}
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
@@ -765,8 +765,8 @@
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_REFERENCE,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_REFERENCE,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -786,8 +786,8 @@
 			}
 			
 			// user info
-			CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")), true);
-			msg.Append( " reference derived from ");
+			CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
+			msg.Append( L" reference derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
 		}
@@ -804,8 +804,8 @@
 				assignrelid(fco);
 
 				// user info
-				CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")));
-				msg.Append( " reference created.");
+				CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))));
+				msg.Append( L" reference created.");
 				msgSC( msg, MSG_INFO);
 			}
 			else // will skip contained elements/attribute values/regnode entries/constraints/name element
@@ -814,10 +814,10 @@
 				needs_target = isNullRef( fco);
 
 				// user info
-				CComBSTR msg = "Merging ";
+				CComBSTR msg = "LMerging ";
 				msg.AppendBSTR(makeLink( fco));
-				if( needs_target) msg.Append(" null");
-				msg.Append( " reference.");
+				if( needs_target) msg.Append(L" null");
+				msg.Append( L" reference.");
 				msgSC( msg, MSG_INFO);
 			}
 		}
@@ -826,22 +826,22 @@
 	ASSERT( fco != NULL );
 	//fco is the reference just created or selected from the already existing ones
 
-	bool bound = GetByName(attributes, "isbound") == "yes"; // if bound it does NOT need referees set by hand
+	bool bound = GetByName(attributes, _T("isbound")) == _T("yes"); // if bound it does NOT need referees set by hand
 	if( needs_target && !bound)
 	{
-		const std::string *s;
-		s = GetByNameX(attributes, "closurelibreferred");
+		const std::tstring *s;
+		s = GetByNameX(attributes, _T("closurelibreferred"));
 		if( s != NULL)
 		{
 			CComObjPtr<IMgaObject> obj;
-			findObjOnAbsPath( project, *s, obj, "referred object");
+			findObjOnAbsPath( project, *s, obj, _T("referred object"));
 
 			if( obj)
 				COMTHROW( obj.QueryInterface( referred));
 			else // report error
 			{
 				CComBSTR bstr("Reference ");
-				bstr.Append( makeLink( fco, makeNameViewable( GetByName( attributes, "closurename")), true));
+				bstr.Append( makeLink( fco, makeNameViewable( GetByName( attributes, _T("closurename"))), true));
 				bstr.Append(": target not found in library. ");
 				bstr.Append("Search path used: ");
 				bstr.Append( makeViewable( *s).c_str());
@@ -852,8 +852,8 @@
 		if( s == NULL || !referred)
 		{
 			// first try to find referred object based on GUID
-			std::string guid = GetByName(attributes, "smartReferredGUID");
-			std::string path = GetByName(attributes, "closure2referred");
+			std::tstring guid = GetByName(attributes, _T("smartReferredGUID"));
+			std::tstring path = GetByName(attributes, _T("closure2referred"));
 			
 			if( !guid.empty())
 			{
@@ -877,14 +877,14 @@
 			if( !referred && !path.empty())
 			{
 				CComObjPtr<IMgaObject> obj;
-				findObjOnRelPath( CComObjPtr<IMgaObject>(fco), path, obj, "referred object");
+				findObjOnRelPath( CComObjPtr<IMgaObject>(fco), path, obj, _T("referred object"));
 
 				if ( obj)
 					COMTHROW( obj.QueryInterface( referred));
 				else // report error
 				{
 					CComBSTR bstr("Reference ");
-					bstr.Append( makeLink( fco, makeNameViewable( GetByName( attributes, "closurename")), true));
+					bstr.Append( makeLink( fco, makeNameViewable( GetByName( attributes, _T("closurename"))), true));
 					bstr.Append(": target not found. ");
 					bstr.Append("Search path used: ");
 					bstr.Append( makeViewable( path).c_str());
@@ -908,7 +908,7 @@
 
 	GetCurrent().object = fco;
 	if( skip_inner_elements)
-		GetCurrent().exstrinfo = "skip";
+		GetCurrent().exstrinfo = _T("skip");
 
 	RegisterLookup(attributes, fco);
 }
@@ -924,7 +924,7 @@
 	//ResolveDerivation(attributes, deriv);
 	(*this.*m_resolveDerFuncPtr)(attributes, deriv);
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -937,7 +937,7 @@
 			assignrelid(fco);
 
 			// user info
-			CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")), true);
+			CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
 			msg.Append( " set derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
@@ -951,7 +951,7 @@
 			if( !found)
 			{
 				CComObjPtr<IMgaMetaFCO> meta;
-				COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+				COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 					OBJTYPE_SET, PutOut(meta)) );
 				ASSERT( meta != NULL );
 
@@ -960,7 +960,7 @@
 				assignrelid(fco);
 
 				// user info
-				CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")));
+				CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))));
 				msg.Append( " set created.");
 				msgSC( msg, MSG_INFO);
 			}
@@ -980,7 +980,7 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
@@ -988,8 +988,8 @@
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_SET,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_SET,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -1011,7 +1011,7 @@
 			}
 
 			// user info
-			CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")), true);
+			CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
 			msg.Append( " set derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
@@ -1029,7 +1029,7 @@
 				assignrelid(fco);
 
 				// user info
-				CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")));
+				CComBSTR msg = makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))));
 				msg.Append( " set created.");
 				msgSC( msg, MSG_INFO);
 			}
@@ -1049,26 +1049,26 @@
 	}
 	ASSERT( fco != NULL );
 
-	bool bound = GetByName(attributes, "isbound") == "yes"; // if bound it does NOT need members added by hand
+	bool bound = GetByName(attributes, _T("isbound")) == _T("yes"); // if bound it does NOT need members added by hand
 	if( needs_members && !bound)
 	{
 		std::list< CComObjPtr<IMgaFCO> > members;//slist
 		
 		// mixed form is used in smartMemberGUIDs
 		// i.e. {E200BEEB-34BC-4271-A134-AA5728C18124}\\/@../@module_ref1|kind=module_ref|relpos=0
-		std::string combineds = GetByName(attributes, "smartMemberGUIDs");
-		std::list< std::string> combinedV = tokenizer( combineds, ' ', false);
+		std::tstring combineds = GetByName(attributes, _T("smartMemberGUIDs"));
+		std::list< std::tstring> combinedV = tokenizer( combineds, ' ', false);
 
 		// not needed currently, because the combined attr contains a series of <guid\\path>s
-		//std::string paths = GetByName(attributes, "closure2members");
-		//std::list< std::string> nameV = tokenizer( paths, ' ', false);
+		//std::tstring paths = GetByName(attributes, _T("closure2members"));
+		//std::list< std::tstring> nameV = tokenizer( paths, ' ', false);
 
-		std::list< std::string>::iterator li = combinedV.begin();
+		std::list< std::tstring>::iterator li = combinedV.begin();
 		for( ; li != combinedV.end(); ++li)
 		{
 			CComObjPtr<IMgaFCO> mem;
 			
-			std::string guid_s, path_s;
+			std::tstring guid_s, path_s;
 			if( (*li).size() >= GLOBAL_ID_LEN && (*li)[0] == '{' && (*li)[GLOBAL_ID_LEN-1] == '}' && (*li)[GLOBAL_ID_LEN] == '\\') // a guid form
 			{
 				guid_s = (*li).substr( 0, GLOBAL_ID_LEN);
@@ -1076,7 +1076,7 @@
 			}
 			else
 			{
-				guid_s = "";
+				guid_s = _T("");
 				path_s = *li;
 			}
 
@@ -1090,7 +1090,7 @@
 			if( !mem)
 			{
 				CComObjPtr<IMgaObject> obj;
-				findObjOnRelPath( CComObjPtr<IMgaObject>(fco), path_s, obj, "set member");
+				findObjOnRelPath( CComObjPtr<IMgaObject>(fco), path_s, obj, _T("set member"));
 				CComObjPtr<IMgaFCO> mem;
 				if( obj) obj.QueryInterface( mem);
 			}
@@ -1104,7 +1104,7 @@
 			else
 			{
 				CComBSTR bstr( "Set ");
-				bstr.Append( makeLink( fco, makeNameViewable( GetByName(attributes, "closurename")), true));
+				bstr.Append( makeLink( fco, makeNameViewable( GetByName(attributes, _T("closurename"))), true));
 				bstr.Append( ": member not found. ");
 				bstr.Append( "Search path used: ");
 				bstr.Append( makeViewable( path_s).c_str());
@@ -1118,7 +1118,7 @@
 		CComObjPtr<IMgaSet> mgaset;
 		COMTHROW( fco.QueryInterface(mgaset) );
 
-		//WAS: if( !(GetByName(attributes, "isbound") == "yes") ) {
+		//WAS: if( !(GetByName(attributes, _T("isbound")) == _T("yes")) ) {
 		{
 			COMTHROW( mgaset->RemoveAll() ); //by ZolMol: if not bound then the members are different, remove the inherited members
 			std::list< CComObjPtr<IMgaFCO> >::iterator i = members.begin();//slist
@@ -1131,7 +1131,7 @@
 	}
 	GetCurrent().object = fco;
 	if( skip_inner_elements)
-		GetCurrent().exstrinfo = "skip";
+		GetCurrent().exstrinfo = _T("skip");
 
 	RegisterLookup(attributes, fco);
 }
@@ -1146,7 +1146,7 @@
 	(*this.*m_resolveDerFuncPtr)(attributes, deriv);
 
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -1157,7 +1157,7 @@
 			COMTHROW( prev->DeriveRootObject(deriv.from, deriv.isinstance, PutOut(model)) );
 
 			// user info
-			CComBSTR msg = makeLink( model, makeNameViewable( GetByName(attributes, "closurename")), true);
+			CComBSTR msg = makeLink( model, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
 			msg.Append( " model derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
@@ -1171,14 +1171,14 @@
 			if( !found)
 			{
 				CComObjPtr<IMgaMetaFCO> meta;
-				COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"), 
+				COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")), 
 					OBJTYPE_MODEL, PutOut(meta)) );
 				ASSERT( meta != NULL );
 
 				COMTHROW( prev->CreateRootObject(meta, PutOut(model)) );
 
 				// user info
-				CComBSTR msg = makeLink( model, makeNameViewable( GetByName(attributes, "closurename")));
+				CComBSTR msg = makeLink( model, makeNameViewable( GetByName(attributes, _T("closurename"))));
 				msg.Append( " model created.");
 				msgSC( msg, MSG_INFO);
 			}
@@ -1197,15 +1197,15 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_MODEL,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_MODEL,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -1225,7 +1225,7 @@
 			}
 
 			// user info
-			CComBSTR msg = makeLink( model, makeNameViewable( GetByName(attributes, "closurename")), true);
+			CComBSTR msg = makeLink( model, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
 			msg.Append( " model derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
@@ -1243,7 +1243,7 @@
 				assignrelid(model);
 
 				// user info
-				CComBSTR msg = makeLink( model, makeNameViewable( GetByName(attributes, "closurename")));
+				CComBSTR msg = makeLink( model, makeNameViewable( GetByName(attributes, _T("closurename"))));
 				msg.Append( " model created.");
 				msgSC( msg, MSG_INFO);
 			}
@@ -1262,12 +1262,12 @@
 	ASSERT( model != NULL );
 
 	GetCurrent().object = model;
-	long crid = toLong(GetByName(attributes,"childrelidcntr"));
+	long crid = toLong(GetByName(attributes,_T("childrelidcntr")));
 	GetCurrent().exnuminfo = crid;
 	COMTHROW(CComQIPtr<IMgaModel>(model)->put_ChildRelIDCounter(crid));
 
 	if( skip_inner_elements)
-		GetCurrent().exstrinfo = "skip";
+		GetCurrent().exstrinfo = _T("skip");
 
 	RegisterLookup(attributes, model);
 }
@@ -1281,7 +1281,7 @@
 	//ResolveDerivation(attributes, deriv);
 	(*this.*m_resolveDerFuncPtr)(attributes, deriv);
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
@@ -1291,7 +1291,7 @@
 			COMTHROW( prev->DeriveRootObject(deriv.from, deriv.isinstance, PutOut(atom)) );
 
 			// user info
-			CComBSTR msg = makeLink( atom, makeNameViewable( GetByName(attributes, "closurename")), true);
+			CComBSTR msg = makeLink( atom, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
 			msg.Append( " atom derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
@@ -1305,7 +1305,7 @@
 			if( !found)
 			{
 				CComObjPtr<IMgaMetaFCO> meta;
-				COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, "kind"),
+				COMTHROW( resolver->get_KindByStr(prev, PutInBstrAttr(attributes, _T("kind")),
 					OBJTYPE_ATOM, PutOut(meta)) );
 				ASSERT( meta != NULL );
 
@@ -1314,7 +1314,7 @@
 				assignrelid(atom);
 
 				// user info
-				CComBSTR msg = makeLink( atom, makeNameViewable( GetByName(attributes, "closurename")));
+				CComBSTR msg = makeLink( atom, makeNameViewable( GetByName(attributes, _T("closurename"))));
 				msg.Append( " atom created.");
 				msgSC( msg, MSG_INFO);
 			}
@@ -1332,15 +1332,15 @@
 	}
 	else
 	{
-		ASSERT( GetPrevName() == "model" );
+		ASSERT( GetPrevName() == _T("model") );
 
 		CComObjPtr<IMgaModel> prev;
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaRole> role;
 		COMTHROW( resolver->get_RoleByStr(prev, 
-			PutInBstrAttr(attributes, "kind"), OBJTYPE_ATOM,
-			PutInBstrAttr(attributes, "role"), NULL, PutOut(role)) );
+			PutInBstrAttr(attributes, _T("kind")), OBJTYPE_ATOM,
+			PutInBstrAttr(attributes, _T("role")), NULL, PutOut(role)) );
 		ASSERT( role != NULL );
 
 		if( deriv.from != NULL )
@@ -1360,7 +1360,7 @@
 			}
 
 			// user info
-			CComBSTR msg = makeLink( atom, makeNameViewable( GetByName(attributes, "closurename")), true);
+			CComBSTR msg = makeLink( atom, makeNameViewable( GetByName(attributes, _T("closurename"))), true);
 			msg.Append( " atom derived from ");
 			msg.AppendBSTR( makeLink( deriv.from));
 			msgSC( msg, MSG_INFO);
@@ -1377,7 +1377,7 @@
 				assignrelid(atom);
 
 				// user info
-				CComBSTR msg = makeLink( atom, makeNameViewable( GetByName(attributes, "closurename")));
+				CComBSTR msg = makeLink( atom, makeNameViewable( GetByName(attributes, _T("closurename"))));
 				msg.Append( " atom created.");
 				msgSC( msg, MSG_INFO);
 			}
@@ -1398,7 +1398,7 @@
 	GetCurrent().object = atom;
 
 	if( skip_inner_elements)
-		GetCurrent().exstrinfo = "skip";
+		GetCurrent().exstrinfo = _T("skip");
 
 	RegisterLookup(attributes, atom);
 }
@@ -1408,7 +1408,7 @@
 	bool skip_inner_elements = false;
 	CComObjPtr<IMgaFolder> folder;
 
-	//if( GetPrevName() == "project" )
+	//if( GetPrevName() == _T("project") )
 	//{
 	//	COMTHROW( project->get_RootFolder(PutOut(folder)) );
 	//}
@@ -1418,7 +1418,7 @@
 		GetPrevObj(prev);
 
 		CComObjPtr<IMgaMetaFolder> meta;
-		CComBSTR fname( PutInBstrAttr(attributes, "kind"));
+		_bstr_t fname(PutInBstrAttr(attributes, _T("kind")));
 
 		VARIANT_BOOL previactmode;
 		COMTHROW(resolver->get_IsInteractive(&previactmode));
@@ -1439,7 +1439,7 @@
 			assignrelid(folder);
 
 			// user info
-			CComBSTR msg = makeLink(CComObjPtr<IMgaObject>(folder), makeNameViewable( GetByName(attributes, "closurename")));
+			CComBSTR msg = makeLink(CComObjPtr<IMgaObject>(folder), makeNameViewable( GetByName(attributes, _T("closurename"))));
 			msg.Append( " folder created.");
 			msgSC( msg, MSG_INFO);
 		}
@@ -1457,9 +1457,9 @@
 	ASSERT( folder != NULL );
 	GetCurrent().object = folder;
 	if( skip_inner_elements)
-		GetCurrent().exstrinfo = "skip";
+		GetCurrent().exstrinfo = _T("skip");
 
-	long crid = toLong(GetByName(attributes,"childrelidcntr"));
+	long crid = toLong(GetByName(attributes,_T("childrelidcntr")));
 	GetCurrent().exnuminfo = crid;
 	COMTHROW(folder->put_ChildRelIDCounter(crid));
 
@@ -1470,24 +1470,23 @@
 {
 	CComObjPtr<IMgaRegNode> regnode;
 
-	CComBstrObj name;
-	CopyTo(GetByName(attributes, "name"), name);
+	_bstr_t name = GetByName(attributes, _T("name")).c_str();
 
-	if( GetPrevName() == "regnode" )
+	if( GetPrevName() == _T("regnode") )
 	{
 		CComObjPtr<IMgaRegNode> prev;
 		GetPrevObj(prev);
 
 		COMTHROW( prev->get_SubNodeByName(name, PutOut(regnode)) );
 	}
-	else if( GetPrevName() == "folder" )
+	else if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> prev;
 		GetPrevObj(prev);
 
 		COMTHROW( prev->get_RegistryNode(name, PutOut(regnode)) );
 	}
-	else if( GetPrevName() == "attribute" )
+	else if( GetPrevName() == _T("attribute") )
 	{
 		CComObjPtr<IMgaAttribute> prev;
 		GetPrevObj(prev);
@@ -1509,17 +1508,17 @@
 	
 	// if MERGE case (skip) and if value is defined HERE, then skip it (don't touch) its value
 	// but the subnodes may change! even in this case if UNDEF, or they may be created if they not exist
-	if( GetPrevious().exstrinfo == "skip" && st == ATTSTATUS_HERE)
+	if( GetPrevious().exstrinfo == _T("skip") && st == ATTSTATUS_HERE)
 	{
-		GetCurrent().exstrinfo = "skip"; // might have subelements so skip those as well
+		GetCurrent().exstrinfo = _T("skip"); // might have subelements so skip those as well
 		GetCurrent().object = regnode;
 		return;
 	}
 
-	if( GetByNameX(attributes, "status") == NULL )
+	if( GetByNameX(attributes, _T("status")) == NULL )
 		COMTHROW( regnode->put_Value(NULL) );
 
-	if( GetByName(attributes, "isopaque") == "yes" )
+	if( GetByName(attributes, _T("isopaque")) == _T("yes") )
 		COMTHROW( regnode->put_Opacity(VARIANT_TRUE) );
 
 	GetCurrent().object = regnode;
@@ -1527,7 +1526,7 @@
 
 void CMgaParser::EndSCRegNode()
 {
-	if( GetPrevious().exstrinfo == "skip") // if merge return, deal only with new regnodes
+	if( GetPrevious().exstrinfo == _T("skip")) // if merge return, deal only with new regnodes
 		return;
 
 	CComObjPtr<IMgaRegNode> fresh_regnode;
@@ -1567,7 +1566,7 @@
 	CComPtr<IMgaRegNode> subnd;
 	COMTHROW( fresh_regnode->get_SubNodeByName( CComBSTR(PREV_ID_STR), &subnd));
 
-	if( subnd) COMTHROW( subnd->put_Value( PutInBstr( guid)) );
+	if( subnd) COMTHROW( subnd->put_Value(guid) );
 
 }
 
@@ -1579,7 +1578,7 @@
 	GetPrevObj(fco);
 
 	CComObjPtr<IMgaMetaAttribute> metaattr;
-	HRESULT hr = resolver->get_AttrByStr(fco, PutInBstrAttr(attributes, "kind"), PutOut(metaattr));
+	HRESULT hr = resolver->get_AttrByStr(fco, PutInBstrAttr(attributes, _T("kind")), PutOut(metaattr));
 
     if( FAILED(hr) || metaattr == NULL )
     {
@@ -1596,13 +1595,13 @@
 	COMTHROW( attr->get_Status( &st));
 
 	// in case parent is merged (skipped) and attr is defined HERE, skip inner contents:
-	if( GetPrevious().exstrinfo == "skip" && st == ATTSTATUS_HERE)
+	if( GetPrevious().exstrinfo == _T("skip") && st == ATTSTATUS_HERE)
 	{
-		GetCurrent().exstrinfo = "skip"; // might have subelements so skip those as well
+		GetCurrent().exstrinfo = _T("skip"); // might have subelements so skip those as well
 		return;
 	}
 
-	if( GetByNameX(attributes, "status") == NULL )
+	if( GetByNameX(attributes, _T("status")) == NULL )
 	{
 		// we set some value, and from the "value" element we set the actual value
 
@@ -1614,15 +1613,15 @@
 
 void CMgaParser::EndSCName()
 {
-	if( GetPrevious().exstrinfo == "skip") // has no sub elements
+	if( GetPrevious().exstrinfo == _T("skip")) // has no sub elements
 		return;
 
-	//if( GetPrevName() == "project" )
+	//if( GetPrevName() == _T("project") )
 	//{
 	//	COMTHROW( project->put_Name(PutInBstr(GetCurrData())) );
 	//}
 	//else
-	if( GetPrevName() == "constraint" )
+	if( GetPrevName() == _T("constraint") )
 	{
 		constraint_name = GetCurrData();
 	}
@@ -1636,19 +1635,19 @@
 
 void CMgaParser::EndSCValue()
 {
-	if( GetPrevious().exstrinfo == "skip") // has no sub elements
+	if( GetPrevious().exstrinfo == _T("skip")) // has no sub elements
 		return;
 
 	// skip if the object is ignored
     if( GetPrevious().object == NULL )
         return;
 
-	if( GetPrevName() == "constraint" )
+	if( GetPrevName() == _T("constraint") )
 	{
 		constraint_value = GetCurrData();
 	}
 	else 
-		if( GetPrevName() == "regnode" )
+		if( GetPrevName() == _T("regnode") )
 	{
 		CComObjPtr<IMgaRegNode> regnode;
 		GetPrevObj(regnode);
@@ -1661,7 +1660,7 @@
 		if( status == 0)
 			COMTHROW( regnode->put_Value(PutInBstr(GetCurrData())) );
 	}
-	else if( GetPrevName() == "attribute" ) 
+	else if( GetPrevName() == _T("attribute") ) 
 	{
 		CComObjPtr<IMgaAttribute> attr;
 		GetPrevObj(attr);
@@ -1687,16 +1686,16 @@
 		case ATTVAL_STRING:
 		case ATTVAL_ENUM:
 		case ATTVAL_DYNAMIC:
-			CopyTo(GetCurrData(), v);
+			v = GetCurrData().c_str();
 			break;
 
 		case ATTVAL_INTEGER:
-			CopyTo(GetCurrData(), v);
+			v = GetCurrData().c_str();
 			COMTHROW( v.ChangeType(VT_I4) );
 			break;
 
 		case ATTVAL_DOUBLE:
-			CopyTo(GetCurrData(), v);
+			v = GetCurrData().c_str();
 			COMTHROW( v.ChangeType(VT_R8) );
 			break;
 
@@ -1729,15 +1728,15 @@
 
 void CMgaParser::EndSCConstraint()
 {
-	if( GetPrevious().exstrinfo == "skip")
+	if( GetPrevious().exstrinfo == _T("skip"))
 	{
-		GetCurrent().exstrinfo = "skip"; // might have subelements, so skip those as well
+		GetCurrent().exstrinfo = _T("skip"); // might have subelements, so skip those as well
 		return;
 	}
 
 	CComObjPtr<IMgaConstraint> constraint;
 
-	if( GetPrevName() == "folder" )
+	if( GetPrevName() == _T("folder") )
 	{
 		CComObjPtr<IMgaFolder> folder;
 		GetPrevObj(folder);

Modified: trunk/GME/Parser/Parser.vcxproj
==============================================================================
--- trunk/GME/Parser/Parser.vcxproj	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/Parser.vcxproj	Thu Mar 31 12:49:49 2011	(r1235)
@@ -23,13 +23,13 @@
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
     <UseOfAtl>Dynamic</UseOfAtl>
-    <CharacterSet>MultiByte</CharacterSet>
+    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
     <UseOfAtl>Dynamic</UseOfAtl>
-    <CharacterSet>MultiByte</CharacterSet>
+    <CharacterSet>Unicode</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">

Modified: trunk/GME/Parser/StdAfx.h
==============================================================================
--- trunk/GME/Parser/StdAfx.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/StdAfx.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -40,6 +40,33 @@
 typedef IMgaConstraint IMgaMetaConstraint;
 typedef IMgaConstraints IMgaMetaConstraints;
 
+#include <string>
+namespace std {
+#ifdef UNICODE
+	typedef wstring tstring;
+#else
+	typedef string tstring;
+#endif
+}
+static void CopyTo(const BSTR from, std::wstring& to)
+{
+	if (from != NULL) {
+		to = from;
+	} else {
+		to = L"";
+	}
+}
+#include "comutil.h"
+#include "comdef.h"
+static _bstr_t PutInBstr(const std::wstring& str)
+{
+	return _bstr_t(str.c_str());
+}
+static _bstr_t PutInBstr(const std::string& str)
+{
+	return _bstr_t(str.c_str());
+}
+
 //{{AFX_INSERT_LOCATION}}
 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
 

Modified: trunk/GME/Parser/Transcoder.cpp
==============================================================================
--- trunk/GME/Parser/Transcoder.cpp	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/Transcoder.cpp	Thu Mar 31 12:49:49 2011	(r1235)
@@ -42,7 +42,7 @@
 	if ( is_open()) close();
 }
 
-void Transcoder::init( const char * f, const char * const encodingName)
+void Transcoder::init( const TCHAR * f, const TCHAR * const encodingName)
 {
 	ASSERT( !m_pFormatter);
 
@@ -59,10 +59,12 @@
 
 	ASSERT( !is_open() );
 
-	open( f, std::ios::out | std::ios::trunc);
+	open(f, std::ios::out | std::ios::trunc | std::ios::binary);
 	if( fail() || !is_open() )
 		HR_THROW(E_INVALID_FILENAME);
 
+	// write BOM
+	*m_pFormatter << (XMLCh) 0xFEFF;
     *m_pFormatter << gXMLDecl1 << m_pFormatter->getEncodingName() << gXMLDecl2; //will dump '<?xml version="1.0" encoding="UTF-8"?> 
 }
 
@@ -104,7 +106,7 @@
 	
 	operator<<( fUnicodeForm);
 	
-	delete fUnicodeForm;
+	XMLString::release(&fUnicodeForm);
 
 	return *this;
 }
@@ -112,7 +114,7 @@
 Transcoder& 
 Transcoder::operator <<( const char toWrite)
 {
-	char tmp[2] = { toWrite, 0 };
+	wchar_t tmp[2] = { toWrite, 0 };
 
 	operator<<( tmp);
 
@@ -120,7 +122,7 @@
 }
 
 Transcoder& 
-Transcoder::operator <<( const std::string& toWrite)
+Transcoder::operator <<( const std::tstring& toWrite)
 {
 	operator<<( toWrite.c_str());
 

Modified: trunk/GME/Parser/Transcoder.h
==============================================================================
--- trunk/GME/Parser/Transcoder.h	Thu Mar 31 10:17:24 2011	(r1234)
+++ trunk/GME/Parser/Transcoder.h	Thu Mar 31 12:49:49 2011	(r1235)
@@ -16,7 +16,7 @@
     Transcoder();
     ~Transcoder();
 
-	void init( const char *, const char * const);
+	void init( const TCHAR *, const TCHAR * const);
 	void finalize();
 	enum Modes
 	{
@@ -33,7 +33,7 @@
 	Transcoder& operator << ( const XMLCh* const toWrite);
 	Transcoder& operator << ( const char * const toWrite);
 	Transcoder& operator << ( const char toWrite);
-	Transcoder& operator << ( const std::string& toWrite);
+	Transcoder& operator << ( const std::tstring& toWrite);
 
 private :
     XMLFormatter* m_pFormatter;


More information about the gme-commit mailing list