public CustomQueryInterfaceResult GetInterface(ref Guid iid, out IntPtr pInterface) { if (iid == typeof(IEnumVARIANT).GUID) { if ((Target is HostObject) || (Target is IHostVariable) || (Target is IByRefArg)) { pInterface = IntPtr.Zero; return(BindSpecialTarget(Collateral.TargetEnumerator) ? CustomQueryInterfaceResult.NotHandled : CustomQueryInterfaceResult.Failed); } } else if (iid == typeof(IDispatchEx).GUID) { if (EnableVTablePatching && !bypassVTablePatching) { var pUnknown = Marshal.GetIUnknownForObject(this); bypassVTablePatching = true; pInterface = UnknownHelpers.QueryInterfaceNoThrow <IDispatchEx>(pUnknown); bypassVTablePatching = false; Marshal.Release(pUnknown); if (pInterface != IntPtr.Zero) { VTablePatcher.GetInstance().PatchDispatchEx(pInterface); return(CustomQueryInterfaceResult.Handled); } } } pInterface = IntPtr.Zero; return(CustomQueryInterfaceResult.NotHandled); }
public ActiveScriptWrapper64(string progID, WindowsScriptEngineFlags flags) { // ReSharper disable SuspiciousTypeConversion.Global pActiveScript = ActivationHelpers.CreateInstance <IActiveScript>(progID); pActiveScriptParse = UnknownHelpers.QueryInterface <IActiveScriptParse64>(pActiveScript); pActiveScriptDebug = UnknownHelpers.QueryInterface <IActiveScriptDebug64>(pActiveScript); pActiveScriptGarbageCollector = UnknownHelpers.QueryInterfaceNoThrow <IActiveScriptGarbageCollector>(pActiveScript); pDebugStackFrameSniffer = UnknownHelpers.QueryInterfaceNoThrow <IDebugStackFrameSnifferEx64>(pActiveScript); activeScript = (IActiveScript)Marshal.GetObjectForIUnknown(pActiveScript); activeScriptParse = (IActiveScriptParse64)activeScript; activeScriptDebug = (IActiveScriptDebug64)activeScript; activeScriptGarbageCollector = activeScript as IActiveScriptGarbageCollector; debugStackFrameSniffer = activeScript as IDebugStackFrameSnifferEx64; if (flags.HasFlag(WindowsScriptEngineFlags.EnableStandardsMode)) { var activeScriptProperty = activeScript as IActiveScriptProperty; if (activeScriptProperty != null) { object name; activeScriptProperty.GetProperty(ScriptProp.Name, IntPtr.Zero, out name); if (Equals(name, "JScript")) { object value = ScriptLanguageVersion.Standards; activeScriptProperty.SetProperty(ScriptProp.InvokeVersioning, IntPtr.Zero, ref value); } } if (!flags.HasFlag(WindowsScriptEngineFlags.DoNotEnableVTablePatching) && MiscHelpers.IsX86InstructionSet()) { HostItem.EnableVTablePatching = true; } } // ReSharper restore SuspiciousTypeConversion.Global }