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

Vardar Sahin sakirsoft at gmail.com
Sun Nov 3 19:50:36 UTC 2013


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>

> 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
>>
>>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20131103/da40a61d/attachment-0001.html>


More information about the Mono-devel-list mailing list