void IActiveScriptSite.OnScriptError(IActiveScriptError scriptError)
            {
                //Trace.WriteLine("OnScriptError scriptError=" + scriptError);
                string sourceLine = null;
                try
                {
                    scriptError.GetSourceLineText(out sourceLine);
                }
                catch
                {
                    // happens sometimes...
                }
                uint sourceContext;
                int lineNumber;
                int characterPosition;
                scriptError.GetSourcePosition(out sourceContext, out lineNumber, out characterPosition);
                lineNumber++;
                characterPosition++;
                System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo;
                scriptError.GetExceptionInfo(out exceptionInfo);

                string message;
                if (!string.IsNullOrEmpty(sourceLine))
                {
                    message = "Script exception: {1}. Error number {0} (0x{0:X8}): {2} at line {3}, column {4}. Source line: '{5}'.";
                }
                else
                {
                    message = "Script exception: {1}. Error number {0} (0x{0:X8}): {2} at line {3}, column {4}.";
                }
                LastException = new ScriptException(string.Format(message, exceptionInfo.scode, exceptionInfo.bstrSource, exceptionInfo.bstrDescription, lineNumber, characterPosition, sourceLine));
                LastException.Column = characterPosition;
                LastException.Description = exceptionInfo.bstrDescription;
                LastException.Line = lineNumber;
                LastException.Number = exceptionInfo.scode;
                LastException.Text = sourceLine;
            }
 void IActiveScriptSite.OnEnterScript()
 {
     //Trace.WriteLine("OnEnterScript");
     LastException = null;
 }