Linux 64bit branch
Jacob Carlborg
doob at me.com
Mon Jan 13 01:38:31 PST 2014
On 2014-01-13 05:29, Jesse Phillips wrote:
> I'm not sure that there is anything specific needed where /*64*/
> comments exist, the tool would have a lot of work to translate many
> types and not just a single cast.
Yes, it needs to translate signatures as well, as you mention below.
> But I did find where there is more work. The segfault pointed to:
>
> org.eclipse.swt.widgets.Display.Display.windowProcFunc3()
It also good to verify that the snippet work for 32bit as well.
> Which is defined as:
>
> private static extern(C) int /*long*/ windowProcFunc3 (int /*long*/
> handle, int /*long*/ arg0, int /*long*/ user_data) {
>
> which is assigned as:
>
> GCallback windowProc3 = cast(GCallback)&windowProcFunc3;
>
> Where GCallback is defined as:
>
> internal.gtk.OS.d
> public alias org.eclipse.swt.internal.c.glib_object.GCallback
> GCallback;
>
> alias _BCD_func__2331 GCallback;
> alias void function() _BCD_func__2331;
>
> I don't understand why it is cast to a function which takes no
> arguments, but suspect that fixing the signatures for /*long*/ is a good
> direction.
The original type GCallback[1] is defined to take no arguments and
return "void". Although I see that it doesn't mean the callback must
take no arguments and return "void".
I have not worked with the Linux port, but in the Mac OS X port they
basically merge all callbacks with the same amounts of arguments to a
single function. In this case "windowProcFunc3", would handle all
callbacks taking three arguments.
Technically I don't think the signature matters, as long as the correct
calling convention is used. Where "correct" is whatever is expected from
the callback and/or the function invoking the callback.
I don't know which type here is best to use. In the Mac OS X port there
is a single type that covers all types except for structs.
https://developer.gnome.org/gobject/stable/gobject-Closures.html#GCallback
--
/Jacob Carlborg
More information about the Digitalmars-d-dwt
mailing list