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

Vardar Sahin sakirsoft at gmail.com
Sun Nov 3 14:58:38 UTC 2013


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. And and maybe you have to
set GLib.Global.ProgramName
to static name in case.


2013/11/2 "Andrés G. Aragoneses" <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>>
>>
>>
>>     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
>>
>>
>
> _______________________________________________
> 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/e0405bad/attachment.html>


More information about the Mono-devel-list mailing list