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

"Andrés G. Aragoneses" knocte at gmail.com
Sun Nov 3 15:12:48 UTC 2013


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>>
>
>
>     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>>>
>
>
>              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>>
>
>
>              Thanks
>
>
>              ___________________________________________________
>              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