[Mono-dev] Fix for using GTK# in mono embedded application

"Andrés G. Aragoneses" knocte at gmail.com
Sat Nov 2 20:54:30 UTC 2013


On 02/11/13 21:42, Vardar Sahin wrote:
> Hey monodev fellows,
>
> first of all I appreciate all your hard work and want to contribute this
> to the mono project.
>
> 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.
>
> The reason why GTK# does not works when you embed mono is as fallowing.
>
> Each GTK# Application has to call Application.Init().
>
> This functions is like this.
>
> public static void Init ()
> {
> SetPrgname ();
> IntPtr argv = new IntPtr(0);
> int argc = 0;
>
> gtk_init (ref argc, ref argv);
>
> SynchronizationContext.SetSynchronizationContext (new
> GLib.GLibSynchronizationContext ());}
>
> Init will fail on SetPrgname (); when mono is embedded in an application.
>
> static void SetPrgname ()
> {
> GLib.Global.ProgramName = System.IO.Path.GetFileNameWithoutExtension
> (Environment.GetCommandLineArgs () [0]);
> }
>
> 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().
>
> I fixed it by registering the internal call for
> Environment.GetCommandLineArgs to my own fucntion and return just a
> dummy string.
>
> My suggestion would be to do the same in mono when you embed it or to
> change SetPrgname  to not relay on Environment.GetCommandLineArgs ().

Sahin, wouldn't this also fix your use case?

https://github.com/mono/gtk-sharp/pull/90/files


Thanks




More information about the Mono-devel-list mailing list