Code: Alles auswählen
    Arg  wargs[10];
    XtSetArg(wargs[0], XtNwidth, 320);
    XtSetArg(wargs[1], XtNlabel, "Click = Quit");
    XtSetArg(wargs[2], XtNbwert_mit_bol, false);
    XtSetValues(command, wargs, 3);Code: Alles auswählen
typedef char *String;
typedef intptr_t	XtIntPtr;  // intptr_t ist ein "long" (64Bit Integer)
typedef XtIntPtr	XtArgVal;
...
typedef struct {
    String	name;
    XtArgVal	value;
} Arg, *ArgList;
...
#define XtSetArg(arg, n, d) ((void)( (arg).name = (n), (arg).value = (XtArgVal)(d) ))
In Pascal habe ich folgende Lösung gemacht, welche auch funktioniert. Ich habe XtSetArg(...) einfach mit allen bis jetzt bekannten typen überladen.
Code: Alles auswählen
  TArg = record
    Name: TString;
    case byte of
      0: (valueP: PChar);
      1: (valueI: LongInt);
      2: (valueB: Boolean);
  end;
...
procedure XtSetArg(var arg: TArg; n: TXtString; pc: PChar); overload; inline;
procedure XtSetArg(var arg: TArg; n: TXtString; p: Pointer); overload; inline;
procedure XtSetArg(var arg: TArg; n: TXtString; int: PtrInt); overload; inline;
procedure XtSetArg(var arg: TArg; n: TXtString; bol: TBoolean); overload; inline;
...
procedure XtSetArg(var arg: TArg; n: TXtString; pc: PChar);
begin
  arg.Name := n;
  arg.valueP := pc;
end;
...
procedure XtSetArg(var arg: TArg; n: TXtString; bol: TBoolean);
begin
  arg.Name := n;
  arg.valueB := bol;
end;