Das ist vermutlich ein Fehler in der XML-Komponente, die Du da verwendest.
Der ARM-Prozessor des PDA kann 32-Bit-Worte nur auf durch 4 teilbaren Speicher-Adressen und 16-Bit Worte nur auf durch 2 teilbaren Speicher-Adressen bearbeiten. (Er kann keine "misaligned"-Zugriffe.) Deshalb muss man bei Typ-Umwandlungen sehr aufpassen. Der PC-Prozessor kann dagegen alle Datentypen an beliebigen Speicheradressen halten.
Beispiel:
Code: Alles auswählen
type
tpi = ^integer;
var
ab: array [b0..15] of byte;
i: integer;
pi: tpi;
for i := 0 to 15 do ab[i] := i;
pi := tpi(&ab[3]);
i := pi^;
end;
Der Befehl i := pi^ wird auf dem ARM (nicht aber auf einem x86) vermutlich die besagte Fehlermeldung erzeugen, weil wahrscheinlich a[0] auf einer durch 4 teilbaren Speicheradresse liegt und a[3] demzufolge nicht.
Macht man keine Typ-Umwandlungen, kann der Compiler normalerweise passenden Code erzeugen, der aber oft _sehr_ viel ineffektiver ist, als bei dem Typ entsprechend abgespeicherten Variablen. (Beim X86 ist der Zugriff ebenfalls deutlich langsamer).
Misaligned Variablen kommen legalerweise z.B. in "packed record"s vor. Eine Möglichkeit, illegale misaligned Zugriffe ohne Typ-Umwandlung, Pointer oder Assembler zu erzeugen, ist deshalb auch ein "absolut" setzen von gepackten Records.
Einzige Lösung: Die XML-Komponente debuggen.
-Michael