Code: Alles auswählen
procedure read_name(w: TWidget; client_data: TXtPointer; call_data: TXtPointer); cdecl;
var
push_button: TWidget;
n: integer;
Text: PChar;
cbs: PXmSelectionBoxCallbackStruct;
begin
push_button := TWidget(client_data);
WriteLn('push ', PtrInt(push_button));
WriteLn('data ', PtrInt(client_data));
// cbs := PXmSelectionBoxCallbackStruct(call_data);
XtVaGetValues(w, XmNuserData, @n, nil);
WriteLn('push ', PtrInt(push_button));
WriteLn('data ', PtrInt(client_data));
Code: Alles auswählen
toplevel := XtVaAppInitialize(@app, 'Demos', nil, 0, @argc, argv, nil, nil);
read_name(toplevel, Pointer(1234), nil);
// push 1234
// data 1234
// push 1234
// data 1234
Code: Alles auswählen
XtAddCallback(dialog, XmNokCallback, @read_name, w);
// push 23966032
// data 23966032
// push 0
// data 23966032
Stelle ich aber auf Stufe "2" oder höher, funktioniert alles wie es sein soll. Die umgekehrte Variante wär eher zu erwarten, da eine aggressive Optimierung eher zu Fehler führt.
Nur woran das liegen kann, keine Ahnung.
Es ist recht schwierig den Code abzuspecken, da auch noch externe Libs eingebunden sind.
Aber ich wollte es hier posten, wen einer von Euch auch mal fast verzweifelt, weil es Werte unerklärlich verändert.
Wen einer es nachvollziehen will, kann dieses Beispiel ausprobieren, dazu muss aber die Motif-Pakage installiert werden.
https://github.com/sechshelme/Lazarus-M ... modify_btn