public class JScriptSite : IActiveScriptSite { private Dictionary<String, Object> _interfaceMap = new Dictionary<string,Object>(); private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public JScriptSite() { } // добавить именованный объект в пространство движка. // после добавления объект будет доступен внутри скрипта. public void AddNamedItem(String s, Object obj) { try { if (this._interfaceMap.ContainsKey(s)) this._interfaceMap[s] = obj; else this._interfaceMap.Add(s, obj); } catch (Exception e) { log.Error("AddNamedItem: " + e.Message); } } #region IActiveScriptSite Members public void GetLCID(out uint plcid) { plcid = (uint) CultureInfo.CurrentCulture.LCID; } public void GetItemInfo( string pstrName, uint dwReturnMask, out object ppiunkItem, IntPtr ppti) { ppiunkItem = null; if (this._interfaceMap.ContainsKey(pstrName)) { ppiunkItem = this._interfaceMap[pstrName]; if (ppti != IntPtr.Zero) { Marshal.WriteIntPtr( ppti, Marshal.GetITypeInfoForType(ppiunkItem.GetType()) ); } } } public void GetDocVersionString(out string pbstrVersion) { throw new NotImplementedException(); } public void OnScriptTerminate(ref object pvarResult, ref EXCEPINFO pexcepinfo) { } public void OnStateChange(uint ssScriptState) { } public void OnScriptError([In, MarshalAs(UnmanagedType.IUnknown)] object pscripterror) { EXCEPINFO ei; IActiveScriptError err = (IActiveScriptError)pscripterror; err.RemoteGetExceptionInfo(out ei); log.Warn("OnScriptError: " + ei.bstrDescription); log.Warn("sCode=" + ei.scode + " wCode=" + ei.wCode); } public void OnEnterScript() { } public void OnLeaveScript() { } #endregion } |