[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