sizeof(int) ist aber nicht sizeof(LPARAM)
Ich bin mir fast sicher, dass Letzeres in Win64 eine andere Größe hat.
Zitat:
CopyMemory(@lP, @x, 20);
Bist du sicher, dass du die Adressen der Variablen zum Kopieren nutzen willst?
Ich hätte ja eher vermutet, dass du die Adressen haben willst, die in den Variablen stehen und nicht die Variablen selber, also ohne @.
Außerdem kommt es mir bissl komisch vor, was du da machst.
-> 20 Byte in sich selbst kopieren (auch noch mit den falschen Adressen der Variablen, was einen geilen Bufferoverflow ergibt)
Spontan würde ich
Marshal.WriteInt32(k_Msg.LParam + 4 * sizeof(int), ms32_RowHeight);
als
PInteger(LParam + 4 * SizeOf(Integer))^ := ms32_RowHeight;
übersetzen.
-> 4 Byte von Variable/Konstante in den Record/Buffer kopieren