Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.038 Beiträge
 
Delphi 12 Athens
 
#4

AW: Nach CopyMemory werden Daten nicht übernommen

  Alt 5. Jan 2014, 21:05
Du kopierst aber nur die ersten 4 Byte der Struktur psa und nicht die Inhalte der einzelnen Array-Elemente. CopyMemory kopiert ja nur eine Anzahl Bytes von einer Speicheradresse zu einer anderen - was auch immer sich dahinter verbirgt. Mit ziemlicher Sicherheit ist es der falsche Ansatz um ein SafeArray zu kopieren (dafür gibt es SafeArrayCopy und SafeArrayCopyData).

Ein SafeArray ist halt etwas völlig anderes als ein normales Delphi Array. Der Typ von PpixelDataArr ist aus dem Code-Abschnitt ja nicht zu ersehen, aber selbst wenn es auch ein PSafeArray ist, wird mit dem CopyMemory die Speicherverwaltung von Windows einfach unterlaufen. Du könntest zwar mit CopyMemory(PpixelDataArr, psa, Sizeof(psa^)); eine Kopie des SafeArray herstellen, aber das ginge mit PpixelDataArr^ := psa^ viel einfacher. Der Speicher für die Daten ist aber nur einmal angelegt und da muss man schon aufpassen, wer den dann wann wieder freigibt.

Warum überhaupt das SafeArray? Brauchst du das anderweitig irgendwo?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat