[commit] r1769 - in trunk: GME/Console Install

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Wed Jan 4 14:35:44 CST 2012


Author: ksmyth
Date: Wed Jan  4 14:35:43 2012
New Revision: 1769

Log:
Activate ScriptHost 32bit out-of-proc on x64.

Modified:
   trunk/GME/Console/Console.odl
   trunk/GME/Console/ScriptEdit.cpp
   trunk/GME/Console/ScriptHost.cpp
   trunk/GME/Console/ScriptHost.h
   trunk/GME/Console/ScriptHost.rgs
   trunk/Install/GME_bin.wxs

Modified: trunk/GME/Console/Console.odl
==============================================================================
--- trunk/GME/Console/Console.odl	Wed Jan  4 14:35:27 2012	(r1768)
+++ trunk/GME/Console/Console.odl	Wed Jan  4 14:35:43 2012	(r1769)
@@ -69,14 +69,14 @@
 	};
 	[
 		object,
-		uuid(390D5505-7202-4565-991A-F3A03DBAEF88),
+		uuid(FC0BDA3C-1D12-4E75-BA73-49BCFBB0BFD1),
 		dual,
 		helpstring("IScriptHost Interface"),
 		pointer_default(unique)
 	]
 	interface IScriptHost : IDispatch
 	{
-		[id(1), helpstring("method InitEngine")] HRESULT InitEngine([in] void* m_console, [in] BSTR engineProgid);
+		[id(1), helpstring("method InitEngine")] HRESULT InitEngine([in] IDispatch* m_console, [in] BSTR engineProgid);
 		[id(2), helpstring("method ProcessString")] HRESULT ProcessString([in] BSTR input);
 		[id(3), helpstring("method SetGMEApp")] HRESULT SetGMEApp([in] IDispatch* gmeapp);
 		[id(4), helpstring("method SetGMEProj")] HRESULT SetGMEProj([in] IDispatch* gmeproj);

Modified: trunk/GME/Console/ScriptEdit.cpp
==============================================================================
--- trunk/GME/Console/ScriptEdit.cpp	Wed Jan  4 14:35:27 2012	(r1768)
+++ trunk/GME/Console/ScriptEdit.cpp	Wed Jan  4 14:35:43 2012	(r1769)
@@ -34,9 +34,19 @@
 	try
 	{
 		m_console = cons;
-		COMTHROW(m_host.CreateInstance(CLSID_ScriptHost));
+
+		HRESULT hr;
+#if defined(_M_IX86)
+		COMTHROW(hr = m_host.CreateInstance(CLSID_ScriptHost, 0, CLSCTX_ALL));
+#elif defined(_M_AMD64)
+		// CLSCTX_ACTIVATE_32_BIT_SERVER to activate 32-bit scripting servers
+		COMTHROW(hr = m_host.CreateInstance(CLSID_ScriptHost, 0, CLSCTX_LOCAL_SERVER|CLSCTX_ACTIVATE_32_BIT_SERVER));
+#else
+#error Unknown arch
+#endif
 		_bstr_t engine(L"JScript");
-		COMTHROW(m_host->InitEngine((void*)m_console, engine));
+//		_bstr_t engine(L"Python.AXScript.2");
+		COMTHROW(m_host->InitEngine(m_console->GetIDispatch(false), engine));
 		this->LimitText( 256);
 		this->SetWindowText( defPrompt); // to attract user attention
 	}
@@ -234,7 +244,7 @@
 			engine = eng;
 
 		_bstr_t input = p_str;
-		COMTHROW(m_host->InitEngine((void*)m_console, engine));
+		COMTHROW(m_host->InitEngine(m_console->GetIDispatch(false), engine));
 		COMTHROW(m_host->ProcessString(input));
 	}
 	catch(hresult_exception& e) {

Modified: trunk/GME/Console/ScriptHost.cpp
==============================================================================
--- trunk/GME/Console/ScriptHost.cpp	Wed Jan  4 14:35:27 2012	(r1768)
+++ trunk/GME/Console/ScriptHost.cpp	Wed Jan  4 14:35:43 2012	(r1769)
@@ -8,7 +8,7 @@
 // CScriptHost
 
 
-STDMETHODIMP CScriptHost::InitEngine(void* console, BSTR engineProgid)
+STDMETHODIMP CScriptHost::InitEngine(IDispatch* console, BSTR engineProgid)
 {
 	// register app and project 
 	try
@@ -16,9 +16,11 @@
 		if (console == NULL) {
 			m_iscript = NULL;
 			m_iscriptParse = NULL;
+			m_console = NULL;
 			return S_OK;
 		}
-		m_console = (CConsoleCtrl*)console;
+		m_console = NULL;
+		m_console = console;
 		_bstr_t newprogid(engineProgid);
 		if (m_enginePID == newprogid)
 			return S_OK;
@@ -67,12 +69,19 @@
 	}
 	catch(hresult_exception &e) 
 	{ 
-		m_console->Message( _T("Input parsing failed!"), MSG_ERROR);
+		Message( _bstr_t(_T("Input parsing failed!")), MSG_ERROR);
 		return e.hr;
 	}
 	return S_OK;
 }
 
+void CScriptHost::Message(BSTR message, msgtype_enum level)
+{
+	static BYTE params[] = VTS_BSTR VTS_I2;
+	COleDispatchDriver disp(m_console, false);
+	disp.InvokeHelper(2, DISPATCH_METHOD, VT_EMPTY, 0, params, message, level);
+}
+
 STDMETHODIMP CScriptHost::GetLCID(/*[out]*/ LCID *plcid)
 {
 	return S_OK;
@@ -156,7 +165,7 @@
 
 		TCHAR err[5000];
 		_stprintf_s(err, _T("Scripting Error at Position: %ld Line: %lu<br>%s"), ch, line, (const TCHAR*)desc);
-		m_console->Message((LPCTSTR)err, MSG_ERROR);
+		Message(_bstr_t(err), MSG_ERROR);
 	}
 	catch(hresult_exception &e) 
 	{ 

Modified: trunk/GME/Console/ScriptHost.h
==============================================================================
--- trunk/GME/Console/ScriptHost.h	Wed Jan  4 14:35:27 2012	(r1768)
+++ trunk/GME/Console/ScriptHost.h	Wed Jan  4 14:35:43 2012	(r1769)
@@ -50,7 +50,7 @@
 // IScriptHost
 public:
 	STDMETHOD(ProcessString)(/*[in]*/ BSTR input);
-	STDMETHOD(InitEngine)(/*[in]*/ void* console, /*[in]*/ BSTR engineProgid);
+	STDMETHOD(InitEngine)(/*[in]*/ IDispatch* console, /*[in]*/ BSTR engineProgid);
 
 // IActiveScriptSite
  public:
@@ -74,7 +74,7 @@
 	STDMETHOD(OnLeaveScript)(void);
 
 private:
-	CConsoleCtrl *m_console;
+	IDispatchPtr m_console;
 	IActiveScriptPtr m_iscript;
 	IActiveScriptParsePtr m_iscriptParse;
 	_bstr_t m_enginePID;
@@ -83,6 +83,7 @@
 	CComPtr<IMgaProject> m_mgaproj;
 	CComPtr<IGMEOLEIt>   m_actMod;
 
+	void Message(BSTR message, msgtype_enum level);
 };
 
 #endif //__SCRIPTHOST_H_

Modified: trunk/GME/Console/ScriptHost.rgs
==============================================================================
--- trunk/GME/Console/ScriptHost.rgs	Wed Jan  4 14:35:27 2012	(r1768)
+++ trunk/GME/Console/ScriptHost.rgs	Wed Jan  4 14:35:43 2012	(r1769)
@@ -20,6 +20,7 @@
 			{
 				val ThreadingModel = s 'Apartment'
 			}
+			val AppID = s '{461F30AF-3BF0-11D4-B3F0-005004D38590}'
 			'TypeLib' = s '{339FD307-717B-4698-AC13-4ACCCF5D4C91}'
 		}
 	}

Modified: trunk/Install/GME_bin.wxs
==============================================================================
--- trunk/Install/GME_bin.wxs	Wed Jan  4 14:35:27 2012	(r1768)
+++ trunk/Install/GME_bin.wxs	Wed Jan  4 14:35:43 2012	(r1769)
@@ -133,11 +133,13 @@
         <File Id="Console.ocx" Name="Console.ocx" KeyPath="yes" Source="..\GME\$(var.Release)\Console.ocx">
           <TypeLib Id="{339FD307-717B-4698-AC13-4ACCCF5D4C91}" Description="Console ActiveX Control module" Language="0" MajorVersion="1" MinorVersion="0" Control="yes">
             <Class Id="{A9B2B82A-B753-4FB0-8F0B-3661BC307053}" Context="InprocServer32" Description="GME Console Property Page" />
-            <Class Id="{CD42B6DD-CCC7-4D4A-A82D-124AF08A6737}" Context="InprocServer32" Description="ScriptHost Class" ThreadingModel="apartment" Programmable="yes">
-              <ProgId Id="Console.ScriptHost.1" Description="ScriptHost Class">
-                <ProgId Id="Console.ScriptHost" Description="ScriptHost Class" />
-              </ProgId>
-            </Class>
+            <AppId Description="MgaUtil" Id="{461F30AF-3BF0-11D4-B3F0-005004D38590}">
+              <Class Id="{CD42B6DD-CCC7-4D4A-A82D-124AF08A6737}" Context="InprocServer32" Description="ScriptHost Class" ThreadingModel="apartment" Programmable="yes">
+                <ProgId Id="Console.ScriptHost.1" Description="ScriptHost Class">
+                  <ProgId Id="Console.ScriptHost" Description="ScriptHost Class" />
+                </ProgId>
+              </Class>
+            </AppId>
             <Class Id="{E4EB8324-13F0-46CB-96A3-F539DF7F79D4}" Context="InprocServer32" Description="GME Console Control" ThreadingModel="apartment" Version="1.0" Control="yes">
               <ProgId Id="GME.Console.1" Description="GME Console Control" />
             </Class>


More information about the gme-commit mailing list