<div><div>Thanks Dino - works great now. Runtime speed is much snappier when compiled.</div><div><br></div><div>One other thing I spotted is that pyc always builds a console app if /main is specified.</div><div><br></div><div>
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;elif arg.startswith(&quot;/main:&quot;):</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;main_name = main = arg[6:]</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;target = System.Reflection.Emit.PEFileKinds.ConsoleApplication</div><div><br></div><div>Confused me for a bit :-) Have added this to Codeplex issue.</div>
<div><br></div></div>Cheers,<div>Davy Mitchell<br>
<br><div class="gmail_quote">On Sat, Nov 8, 2008 at 10:13 PM, Dino Viehland <span dir="ltr">&lt;<a href="mailto:dinov@microsoft.com" target="_blank">dinov@microsoft.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">










<div lang="EN-US" link="blue" vlink="purple">

<div>

<p><span style="font-size:11.0pt;color:#1F497D">Oh, the problem is that pyc.py doesn&#39;t mark the thread as
STA.&nbsp; You can add this line to pyc.py right after mainMethod = </span></p>

<p><span style="font-size:11.0pt;color:#1F497D">&nbsp;</span></p>

<p><span style="font-size:11.0pt;color:#1F497D">mainMethod.SetCustomAttribute(clr.GetClrType(System.STAThreadAttribute).GetConstructor(()),
System.Array[System.Byte](()))</span></p>

<p><span style="font-size:11.0pt;color:#1F497D">&nbsp;</span></p>

<p><span style="font-size:11.0pt;color:#1F497D">and it should work.&nbsp; We should do that by default for
winexe&#39;s and probably offer an option to control STA/MTA for
non-WinEXEs.&nbsp; </span></p>

<p><span style="font-size:11.0pt;color:#1F497D">&nbsp;</span></p>

<p><span style="font-size:11.0pt;color:#1F497D">Thanks for reporting this.&nbsp; I&#39;ve opened a bug (<a href="http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=19409" target="_blank">http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=19409</a>)
and we can probably refresh the sample.</span></p>

<p><span style="font-size:11.0pt;color:#1F497D">&nbsp;</span></p>

<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">

<p><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt">
<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a> [mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>] <b>On
Behalf Of </b>Davy Mitchell<br>
<b>Sent:</b> Saturday, November 08, 2008 1:59 PM<div><div></div><div><br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> Re: [IronPython] ActiveX STA Issue in compiled Winforms EXE</div></div></span></p>

</div><div><div></div><div>

<p>&nbsp;</p>

<p>Thanks Dino - here&#39;s the info:</p>

<div>

<p>&nbsp;</p>

</div>

<div>

<div>

<p>Unhandled Exception: System.Threading.ThreadStateException:
ActiveX control &#39;8856f961-340a-11d0-a96b-00c04fd705a2&#39; cannot be instantiated
because the current thread is not in a single-threaded apartment.</p>

</div>

<div>

<p>&nbsp;&nbsp; at
System.Windows.Forms.WebBrowserBase..ctor(String clsidString)</p>

</div>

<div>

<p>&nbsp;&nbsp; at System.Windows.Forms.WebBrowser..ctor()</p>

</div>

<div>

<p>&nbsp;&nbsp; at _stub_$24##21(Closure , CallSite ,
CodeContext , Object )</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 target,
CallSite site, Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite
site, T0 arg0, T1 arg1)</p>

</div>

<div>

<p>&nbsp;&nbsp; at S$1.__init__$7(Closure , Object self)</p>

</div>

<div>

<p>&nbsp;&nbsp; at _stub_$18##15(Closure , CallSite ,
CodeContext , Object , Object )</p>

</div>

<div>

<p>&nbsp;&nbsp; at Microsoft.Scripting.Actions.MatchCaller.Call3[T0,T1,T2,TRet](Func`5
target, CallSite site, Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.UpdateDelegates.Update3[T,T0,T1,T2,TRet](CallSite
site, T0 arg0, T1 arg1, T2 arg2)</p>

</div>

<div>

<p>&nbsp;&nbsp; at _stub_$17##14(Closure , CallSite ,
CodeContext , Object )</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 target,
CallSite site, Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite
site, T0 arg0, T1 arg1)</p>

</div>

<div>

<p>&nbsp;&nbsp; at _stub_$16##13(Closure , CallSite ,
CodeContext , Object )</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet](Func`4 target, CallSite
site, Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.UpdateDelegates.Update2[T,T0,T1,TRet](CallSite
site, T0 arg0, T1 arg1)</p>

</div>

<div>

<p>&nbsp;&nbsp; at S$1.Initialize(Scope $scope, LanguageContext
$language)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Runtime.OptimizedScriptCode.InvokeTarget(LambdaExpression
code, Scope scope)</p>

</div>

<div>

<p>&nbsp;&nbsp; at Microsoft.Scripting.ScriptCode.Run(Scope
scope)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.PythonContext.CreateModule(String fileName, Scope scope, ScriptCode
scriptCode, ModuleOptions options)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.PythonContext.CompileModule(String fileName, String
moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode&amp;
scriptCode)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.PythonContext.CompileModule(String fileName, String
moduleName, SourceUnit sourceCode, ModuleOptions options)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.Importer.LoadFromSourceUnit(CodeContext context, SourceUnit
sourceCode, String name, String path)</p>

</div>

<div>

<p>&nbsp;&nbsp; at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext
context, String name, String path)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String name,
String fullName, String str)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, String
name, String fullName, List path, Func`5 defaultLoader)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String name,
String fullName, List path)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.Importer.ImportTopAbsolute(CodeContext context, String name)</p>

</div>

<div>

<p>&nbsp;&nbsp; at IronPython.Runtime.Importer.ImportModule(CodeContext
context, Object globals, String modName, Boolean bottom, Int32 level)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.Builtin.__import__(CodeContext context, String name, Object
globals, Object locals, Object fromlist, Int32 level)</p>

</div>

<div>

<p>&nbsp;&nbsp; at _stub_$1##1(Closure , CallSite , CodeContext
, Object , String , IAttributesCollection , IAttributesCollection , PythonTuple
, Int32 )</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.MatchCaller.Call7[T0,T1,T2,T3,T4,T5,T6,TRet](Func`9
target, CallSite site, Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
Microsoft.Scripting.Actions.CallSite`1.UpdateAndExecute(Object[] args)</p>

</div>

<div>

<p>&nbsp;&nbsp; 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</p>

</div>

<div>

<p>rg6)</p>

</div>

<div>

<p>&nbsp;&nbsp; at IronPython.Runtime.Importer.Import(CodeContext
context, String fullName, PythonTuple from, Int32 level)</p>

</div>

<div>

<p>&nbsp;&nbsp; at
IronPython.Runtime.Operations.PythonOps.InitializeModule(Assembly precompiled,
String main, String[] references)</p>

</div>

<div>

<p>&nbsp;&nbsp; at PythonMain.Main()</p>

</div>

</div>

<div>

<p>&nbsp;</p>

</div>

<div>

<p>Repro code is:</p>

</div>

<div>

<div>

<p>&nbsp;</p>

</div>

<div>

<p>import clr</p>

</div>

<div>

<p>clr.AddReference(&#39;System.Windows.Forms&#39;)</p>

</div>

<div>

<p>from System.Windows.Forms import *</p>

</div>

<div>

<p>&nbsp;</p>

</div>

<div>

<p>class MainForm(Form):</p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp;def __init__(self):</p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;self.Dock = DockStyle.Fill</p>

</div>

<div>

<p>&nbsp;&nbsp; &nbsp; &nbsp;
&nbsp;self.Controls.Add(WebBrowser())</p>

</div>

<div>

<p>form = MainForm()</p>

</div>

<div>

<p>Application.Run(form)</p>

</div>

<div>

<p>&nbsp;</p>

</div>

</div>

<div>

<p>Compiled with:</p>

</div>

<div>

<p>ipy pyc.py /out:wf /target:winexe /main:repro.py</p>

</div>

<div>

<p>&nbsp;</p>

</div>

<div>

<p>-X:ExceptionDetail didn&#39;t alter the output from the exe. Run
from ipy there was no issue.</p>

</div>

<div>

<p>&nbsp;</p>

</div>

<div>

<p>Cheers,</p>

</div>

<div>

<p style="margin-bottom:12.0pt">Davy</p>

<div>

<p>On Sat, Nov 8, 2008 at 5:39 PM, Dino Viehland &lt;<a href="mailto:dinov@microsoft.com" target="_blank">dinov@microsoft.com</a>&gt; wrote:</p>

<p>I&#39;d start w/ -X:ExceptionDetail to get the full stack trace.
&nbsp;Presumably there&#39;s something higher up the stack then the MatchCaller on
the stack.</p>

<div>

<div>

<p><br>
-----Original Message-----<br>
From: <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
[mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
On Behalf Of Davy Mitchell<br>
Sent: Saturday, November 08, 2008 6:19 AM<br>
To: Discussion of IronPython<br>
Subject: Re: [IronPython] ActiveX STA Issue in compiled Winforms EXE<br>
<br>
Hi Michael<br>
<br>
&gt;Are you doing this from a separate thread?<br>
<br>
No.<br>
<br>
It&#39;s a couple of modules deep from the &#39;main&#39; script. Was going to try<br>
a single py file to repro.<br>
<br>
&gt; I assume it works fine when run uncompiled?<br>
<br>
Yep, runs great.<br>
Cheers,<br>
Davy<br>
<br>
<br>
On 11/8/08, Michael &lt;<a href="mailto:fuzzyman@gmail.com" target="_blank">fuzzyman@gmail.com</a>&gt;
wrote:<br>
&gt; Are you doing this from a separate thread? I assume it works fine when<br>
&gt; run uncompiled?<br>
&gt;<br>
&gt;<br>
&gt; Michael<br>
&gt;<br>
&gt; <a href="http://www.ironpythoninaction.com" target="_blank">http://www.ironpythoninaction.com</a><br>
&gt;<br>
&gt; On 8 Nov 2008, at 12:10, &quot;Davy Mitchell&quot; &lt;<a href="mailto:daftspaniel@gmail.com" target="_blank">daftspaniel@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; IPY 2.0 RC1<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; ActiveX Issue in a pyc compiled Winforms EXE which uses the<br>
&gt;&gt; WebBrowser control.<br>
&gt;&gt;<br>
&gt;&gt; Unhandled Exception: System.Threading.ThreadStateException: ActiveX<br>
&gt;&gt; control &#39;8856f961-340a-11d0-a96b-00c04fd705a2&#39; cannot be<br>
&gt;&gt; instantiated because the current thread is not in a single-threaded<br>
&gt;&gt; apartment.<br>
&gt;&gt; &nbsp; &nbsp;at System.Windows.Forms.WebBrowserBase..ctor(String
clsidString)<br>
&gt;&gt; &nbsp; &nbsp;at System.Windows.Forms.WebBrowser..ctor()<br>
&gt;&gt; &nbsp; &nbsp;at _stub_$643##332(Closure , CallSite , CodeContext ,
Object )<br>
&gt;&gt; &nbsp; &nbsp;at
Microsoft.Scripting.Actions.MatchCaller.Call2[T0,T1,TRet]<br>
&gt;&gt; (Func`4 target, C<br>
&gt;&gt;<br>
&gt;&gt; Help!! :-)<br>
&gt;&gt;<br>
&gt;&gt; Any thoughts before I delve further into this?<br>
&gt;&gt;<br>
&gt;&gt; Thanks<br>
&gt;&gt; Davy Mitchell<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Users mailing list<br>
&gt;&gt; <a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
&gt;&gt; <a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt; _______________________________________________<br>
&gt; Users mailing list<br>
&gt; <a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
&gt; <a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt;<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a></p>

</div>

</div>

</div>

<p>&nbsp;</p>

</div>

</div></div></div>

</div>


<br>_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br></blockquote></div><br></div>