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

"Andrés G. Aragoneses" knocte at gmail.com
Mon Nov 4 07:21:34 UTC 2013


Why do you assume that there is a bad consequence if g_set_prgname() is 
not called? Please test it, and if you confirm any bad behaviour, come 
back with more info.

On 03/11/13 20:50, Vardar Sahin wrote:
> I think that GLib.Global.ProgramName has to be set to a value.I am not
> sure what will happen when it is not set.
> In case args == null and we should set GLib.Global.ProgramName to a
> static value like this.
>
> var args = Environment.GetCommandLineArgs ();
> if (args != null && args.Length > 0){
>      GLib.Global.ProgramName =
> System.IO.Path.GetFileNameWithoutExtension (args [0]);
> }else
> {
>     GLib.Global.ProgramName = "EmbeddedMono";
> }
>
>
> 2013/11/3 "Andrés G. Aragoneses" <knocte at gmail.com
> <mailto:knocte at gmail.com>>
>
>     On 03/11/13 15:58, Vardar Sahin wrote:
>
>         Environment.GetCommandLineArgs is an internal call and my
>         assumption was
>         that the internal call is not registered to a C function. But
>         now I see
>         that I can call Environment.__GetCommandLineArgs.
>         I checked it out and Environment.GetCommandLineArgs returns null
>         if you
>         embed mono into your application.
>
>         So you have to check for a null reference.
>
>
>     Ok thanks, I updated the pull request adding a null check
>
>
>
>         And and maybe you have to set
>         GLib.Global.ProgramName to static name in case.
>
>
>     What do you mean? GLib.Global.ProgramName is already static.
>
>     Thanks
>
>
>
>
>         2013/11/2 "Andrés G. Aragoneses" <knocte at gmail.com
>         <mailto:knocte at gmail.com>
>         <mailto:knocte at gmail.com <mailto:knocte at gmail.com>>>
>
>
>              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>
>                  <mailto:knocte at gmail.com <mailto:knocte at gmail.com>>
>                  <mailto:knocte at gmail.com <mailto:knocte at gmail.com>
>         <mailto: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>
>                  <https://github.com/mono/gtk-____sharp/pull/90/files
>         <https://github.com/mono/gtk-__sharp/pull/90/files>>
>
>
>           <https://github.com/mono/gtk-____sharp/pull/90/files
>         <https://github.com/mono/gtk-__sharp/pull/90/files>
>                  <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.
>         <mailto:Mono-devel-list at lists.>____ximian.com <http://ximian.com>
>                  <mailto: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>
>
>         <http://lists.ximian.com/____mailman/listinfo/mono-devel-____list <http://lists.ximian.com/__mailman/listinfo/mono-devel-__list>>
>
>
>         <http://lists.ximian.com/____mailman/listinfo/mono-devel-____list <http://lists.ximian.com/__mailman/listinfo/mono-devel-__list>
>
>         <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
>                  <mailto: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>
>
>         <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
>              <mailto: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>
>
>         <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
>         <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
>     <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