Ejemplo n.º 1
0
        /// <summary>
        /// Constructs an instance of the Active Script wrapper
        /// </summary>
        /// <param name="clsid">CLSID of script engine</param>
        /// <param name="languageVersion">Version of script language</param>
        public ActiveScriptWrapper(string clsid, ScriptLanguageVersion languageVersion)
        {
            _is64Bit = Utils.Is64BitProcess();

            _pActiveScript = ComHelpers.CreateInstanceByClsid <IActiveScript>(clsid);
            if (_is64Bit)
            {
                _pActiveScriptParse64 = ComHelpers.QueryInterface <IActiveScriptParse64>(_pActiveScript);
                _pActiveScriptDebug64 = ComHelpers.QueryInterface <IActiveScriptDebug64>(_pActiveScript);
            }
            else
            {
                _pActiveScriptParse32 = ComHelpers.QueryInterface <IActiveScriptParse32>(_pActiveScript);
                _pActiveScriptDebug32 = ComHelpers.QueryInterface <IActiveScriptDebug32>(_pActiveScript);
            }
            _pActiveScriptGarbageCollector = ComHelpers.QueryInterfaceNoThrow <IActiveScriptGarbageCollector>(_pActiveScript);

            _activeScript = (IActiveScript)Marshal.GetObjectForIUnknown(_pActiveScript);
            if (_is64Bit)
            {
                _activeScriptParse64 = (IActiveScriptParse64)_activeScript;
            }
            else
            {
                _activeScriptParse32 = (IActiveScriptParse32)_activeScript;
            }
            _activeScriptGarbageCollector = _activeScript as IActiveScriptGarbageCollector;

            if (languageVersion != ScriptLanguageVersion.None)
            {
                var activeScriptProperty = _activeScript as IActiveScriptProperty;
                if (activeScriptProperty != null)
                {
                    object scriptLanguageVersion = (int)languageVersion;
                    uint   result = activeScriptProperty.SetProperty((uint)ScriptProperty.InvokeVersioning,
                                                                     IntPtr.Zero, ref scriptLanguageVersion);
                    if (result != (uint)ScriptHResult.Ok)
                    {
                        throw new JsEngineLoadException(
                                  string.Format(NetFrameworkStrings.Runtime_ActiveScriptLanguageVersionSelectionFailed, languageVersion));
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Constructs instance of the <see cref="ActiveScriptParseWrapper"/> class
        /// </summary>
        /// <param name="pActiveScript">Pointer to an instance of native JavaScript engine</param>
        /// <param name="activeScript">Instance of native JavaScript engine.
        /// Must implement IActiveScriptParse32 or IActiveScriptParse64.</param>
        public ActiveScriptParseWrapper(IntPtr pActiveScript, IActiveScript activeScript)
        {
            _is64Bit = Utils.Is64BitProcess();

            if (_is64Bit)
            {
                _pActiveScriptParse64 = ComHelpers.QueryInterface <IActiveScriptParse64>(pActiveScript);
                _activeScriptParse64  = activeScript as IActiveScriptParse64;
            }
            else
            {
                _pActiveScriptParse32 = ComHelpers.QueryInterface <IActiveScriptParse32>(pActiveScript);
                _activeScriptParse32  = activeScript as IActiveScriptParse32;
            }

            if (_activeScriptParse64 == null && _activeScriptParse32 == null)
            {
                throw new NotSupportedException(NetFrameworkStrings.Runtime_InvalidParserImplementationError);
            }
        }