Thanks Dino - works great now. Runtime speed is much snappier when compiled.
One other thing I spotted is that pyc always builds a console app if /main is specified. elif arg.startswith("/main:"): main_name = main = arg[6:] target = System.Reflection.Emit.PEFileKinds.ConsoleApplication Confused me for a bit :-) Have added this to Codeplex issue. Cheers,Davy Mitchell On Sat, Nov 8, 2008 at 10:13 PM, Dino Viehland <[EMAIL PROTECTED]> wrote: > Oh, the problem is that pyc.py doesn't mark the thread as STA. You can > add this line to pyc.py right after mainMethod = … > > > > mainMethod.SetCustomAttribute(clr.GetClrType(System.STAThreadAttribute).GetConstructor(()), > System.Array[System.Byte](())) > > > > and it should work. We should do that by default for winexe's and probably > offer an option to control STA/MTA for non-WinEXEs. > > > > Thanks for reporting this. I've opened a bug ( > http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=19409) > and we can probably refresh the sample. > > > > *From:* [EMAIL PROTECTED] [mailto: > [EMAIL PROTECTED] *On Behalf Of *Davy Mitchell > *Sent:* Saturday, November 08, 2008 1:59 PM > > *To:* Discussion of IronPython > *Subject:* Re: [IronPython] ActiveX STA Issue in compiled Winforms EXE > > > > Thanks Dino - here's the info: > > > > Unhandled Exception: System.Threading.ThreadStateException: ActiveX control > '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the > current thread is not in a single-threaded apartment. > > at System.Windows.Forms.WebBrowserBase..ctor(String clsidString) > > at System.Windows.Forms.WebBrowser..ctor() > > at _stub_$24##21(Closure , CallSite , CodeContext , Object ) > > at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 > target, CallSite site, Object[] args) > > at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] > args) > > at > Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite > site, T0 arg0, T1 arg1) > > at S$1.__init__$7(Closure , Object self) > > at _stub_$18##15(Closure , CallSite , CodeContext , Object , Object ) > > at Microsoft.Scripting.Actions.MatchCaller.Call3[T0,T1,T2,TRet](Func`5 > target, CallSite site, Object[] args) > > at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] > args) > > at > Microsoft.Scripting.Actions.UpdateDelegates.Update3[T,T0,T1,T2,TRet](CallSite > site, T0 arg0, T1 arg1, T2 arg2) > > at _stub_$17##14(Closure , CallSite , CodeContext , Object ) > > at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 > target, CallSite site, Object[] args) > > at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] > args) > > at > Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite > site, T0 arg0, T1 arg1) > > at _stub_$16##13(Closure , CallSite , CodeContext , Object ) > > at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 > target, CallSite site, Object[] args) > > at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] > args) > > at > Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite > site, T0 arg0, T1 arg1) > > at S$1.Initialize(Scope $scope, LanguageContext $language) > > at > Microsoft.Scripting.Runtime.OptimizedScriptCode.InvokeTarget(LambdaExpression > code, Scope scope) > > at Microsoft.Scripting.ScriptCode.Run(Scope scope) > > at IronPython.Runtime.PythonContext.CreateModule(String fileName, Scope > scope, ScriptCode scriptCode, ModuleOptions options) > > at IronPython.Runtime.PythonContext.CompileModule(String fileName, > String moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& > scriptCode) > > at IronPython.Runtime.PythonContext.CompileModule(String fileName, > String moduleName, SourceUnit sourceCode, ModuleOptions options) > > at IronPython.Runtime.Importer.LoadFromSourceUnit(CodeContext context, > SourceUnit sourceCode, String name, String path) > > at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, > String name, String path) > > at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String > name, String fullName, String str) > > at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, > String name, String fullName, List path, Func`5 defaultLoader) > > at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, > String name, String fullName, List path) > > at IronPython.Runtime.Importer.ImportTopAbsolute(CodeContext context, > String name) > > at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object > globals, String modName, Boolean bottom, Int32 level) > > at IronPython.Runtime.Builtin.__import__(CodeContext context, String > name, Object globals, Object locals, Object fromlist, Int32 level) > > at _stub_$1##1(Closure , CallSite , CodeContext , Object , String , > IAttributesCollection , IAttributesCollection , PythonTuple , Int32 ) > > at > Microsoft.Scripting.Actions.MatchCaller.Call7[T0,T1,T2,T3,T4,T5,T6,TRet](Func`9 > target, CallSite site, Object[] args) > > at Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] > args) > > at > Microsoft.Scripting.Actions.UpdateDelegates.Update7[T,T0,T1,T2,T3,T4,T5,T6,TRet](CallSite > site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 > > rg6) > > at IronPython.Runtime.Importer.Import(CodeContext context, String > fullName, PythonTuple from, Int32 level) > > at IronPython.Runtime.Operations.PythonOps.InitializeModule(Assembly > precompiled, String main, String[] references) > > at PythonMain.Main() > > > > Repro code is: > > > > import clr > > clr.AddReference('System.Windows.Forms') > > from System.Windows.Forms import * > > > > class MainForm(Form): > > def __init__(self): > > self.Dock = DockStyle.Fill > > self.Controls.Add(WebBrowser()) > > form = MainForm() > > Application.Run(form) > > > > Compiled with: > > ipy pyc.py /out:wf /target:winexe /main:repro.py > > > > -X:ExceptionDetail didn't alter the output from the exe. Run from ipy there > was no issue. > > > > Cheers, > > Davy > > On Sat, Nov 8, 2008 at 5:39 PM, Dino Viehland <[EMAIL PROTECTED]> wrote: > > I'd start w/ -X:ExceptionDetail to get the full stack trace. Presumably > there's something higher up the stack then the MatchCaller on the stack. > > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto: > [EMAIL PROTECTED] On Behalf Of Davy Mitchell > Sent: Saturday, November 08, 2008 6:19 AM > To: Discussion of IronPython > Subject: Re: [IronPython] ActiveX STA Issue in compiled Winforms EXE > > Hi Michael > > >Are you doing this from a separate thread? > > No. > > It's a couple of modules deep from the 'main' script. Was going to try > a single py file to repro. > > > I assume it works fine when run uncompiled? > > Yep, runs great. > Cheers, > Davy > > > On 11/8/08, Michael <[EMAIL PROTECTED]> wrote: > > Are you doing this from a separate thread? I assume it works fine when > > run uncompiled? > > > > > > Michael > > > > http://www.ironpythoninaction.com > > > > On 8 Nov 2008, at 12:10, "Davy Mitchell" <[EMAIL PROTECTED]> wrote: > > > >> IPY 2.0 RC1 > >> > >> > >> ActiveX Issue in a pyc compiled Winforms EXE which uses the > >> WebBrowser control. > >> > >> Unhandled Exception: System.Threading.ThreadStateException: ActiveX > >> control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be > >> instantiated because the current thread is not in a single-threaded > >> apartment. > >> at System.Windows.Forms.WebBrowserBase..ctor(String clsidString) > >> at System.Windows.Forms.WebBrowser..ctor() > >> at _stub_$643##332(Closure , CallSite , CodeContext , Object ) > >> at Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet] > >> (Func`4 target, C > >> > >> Help!! :-) > >> > >> Any thoughts before I delve further into this? > >> > >> Thanks > >> Davy Mitchell > >> _______________________________________________ > >> Users mailing list > >> Users@lists.ironpython.com > >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > _______________________________________________ > > Users mailing list > > Users@lists.ironpython.com > > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > > _______________________________________________ > Users mailing list > Users@lists.ironpython.com > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > _______________________________________________ > Users mailing list > Users@lists.ironpython.com > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > > > > _______________________________________________ > Users mailing list > Users@lists.ironpython.com > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com > >
_______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com