<div dir="ltr">Hey monodev fellows,<div><br></div><div>first of all I appreciate all your hard work and want to contribute this to the mono project.</div><div><br></div><div>Right now it is not possible to use GTK# with an application which embeds mono. GTK# works just fine if you use mono as a standalone application eg mono.exe.</div>
<div><br></div><div>The reason why GTK# does not works when you embed mono is as fallowing.</div><div><br></div><div>Each GTK# Application has to call Application.Init(). </div><div><br></div><div>This functions is like this.</div>
<div><br></div><div><div>public static void Init ()</div><div>{</div><div><span class="" style="white-space:pre">               </span>SetPrgname ();</div><div><span class="" style="white-space:pre">             </span>IntPtr argv = new IntPtr(0);</div>
<div><span class="" style="white-space:pre">            </span>int argc = 0;</div><div><br></div><div><span class="" style="white-space:pre">             </span>gtk_init (ref argc, ref argv);</div><div><br></div><div>SynchronizationContext.SetSynchronizationContext (new GLib.GLibSynchronizationContext ());<span class="" style="white-space:pre">          </span>}</div>
</div><div><br></div><div>Init will fail on SetPrgname (); when mono is embedded in an application. </div><div><br></div><div><div>static void SetPrgname ()</div><div>{</div><div>GLib.Global.ProgramName = System.IO.Path.GetFileNameWithoutExtension (Environment.GetCommandLineArgs () [0]);</div>
<div>}</div></div><div><br></div><div>When embedding Mono, Environment.GetCommandLineArgs () will fail because it is not set to anything. When you run the same on mono as a standalone application it will work because mono will pass the command line argument via Environment.GetCommandLineArgs(). </div>
<div><br></div><div>I fixed it by registering the internal call for Environment.GetCommandLineArgs to my own fucntion and return just a dummy string. </div><div><br></div><div>My suggestion would be to do the same in mono when you embed it or to change SetPrgname  to not relay on Environment.GetCommandLineArgs ().</div>
<div><br></div><div>Best Regards</div><div>Sahin</div></div>