[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