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

"Andrés G. Aragoneses" knocte at gmail.com
Sat Nov 2 21:17:51 UTC 2013


Being not registered means that accessing GetCommandLineArgs throws an 
exception? If yes, what kind?

On 02/11/13 22:10, Vardar Sahin wrote:
> Hey Andrés,
>
> thanks for the quick replay. I am not sure if this will fix the problem.
> I think the problem is that you can not call
> Environment.GetCommandLineArgs() when you embed mono.
> Environment.GetCommandLineArgs() is an internal call and it seems like
> it is not registered when you embed mono.
>
> Best
> Sahin
>
>
>
>
> 2013/11/2 "Andrés G. Aragoneses" <knocte at gmail.com
> <mailto:knocte at gmail.com>>
>
>     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
>     <https://github.com/mono/gtk-sharp/pull/90/files>
>
>
>     Thanks
>
>
>     _________________________________________________
>     Mono-devel-list mailing list
>     Mono-devel-list at lists.ximian.__com
>     <mailto:Mono-devel-list at lists.ximian.com>
>     http://lists.ximian.com/__mailman/listinfo/mono-devel-__list
>     <http://lists.ximian.com/mailman/listinfo/mono-devel-list>
>
>
>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>




More information about the Mono-devel-list mailing list