[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