Erstmal danke für deine Kommentare.
' schrieb:Bist du sicher, dass da beidesmal zwei Sterne hingehören? Zwei Sterne heißt doch Pointer auf Pointer auf Daten. Für ein 1DArray reicht doch ein Pointer - im Endeffekt also ein PChars (PWideChar). DSNewHClr erzeugt auch nur einen Pointer auf Daten. Da ist mit Array-Handle nichts.
Es wird empfolen dynamische Speicherallozierung mittels Handles vorzunehmen. Wenn ich es nun richtig verstanden habe bedeuten zwei Sterne ein Pointer auf ein Pointer bzw. eine Adresse auf eine Adresse wobei der zweite Pointer eine Adresse auf den Master Pointer beschreibt. Ich fordere mir also Speicher einer bestimmten Größe an und der Memory Manager reserviert den Speicher und fügt diese Adresse in eine Liste des Master Pointers hinzu.
Im Prinzip bin ich mir sehr sicher das diese Allozierung stimmt.
' schrieb:Das wäre ja richtig (fast: muss heißen sizeof(uInt16)*81920, statt nur 81920).
Da hast du denke ich recht, danke.
' schrieb:Hier wird kopiert von pointer zu Pointer. Allerdings beißt sich "(UHandle*)ArrayMemoryHdl" mit der Deklaration "uInt16 **ArrayMemoryHdl;". Du überschreibst hier den Handle, nicht die Daten. Fehlt hier ein & ?
Das könnte auch eine Fehlerquelle sein. In der Beschreibung von MoveBlock steht das zwei Pointer als Übergabeparameter erwartet werden. Der Erste auf die Quelladresse und der Zweite auf die Zieladresse. Könnte also sein das die Übergabe so aussehen müsste:<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>MoveBlock((void*)Datenarray, (UHandle**)&ArrayMemoryHdl, 81920);</div>
' schrieb:Da kann ich jetzt nix zu sagen. Aber ob das Ziel ein Array ist oder ein PChar, sollte dem Befehl egal sein.
Ich denke das sollte funktionieren.
' schrieb:Das ist richtig - bei einem Stern.
ArrayMemoryHdl wurde von mir als Handle deklariert, desshalb sollte auch das stimmen.
Korrigiert mich bitte wenn ich etwas falsches sage. Ich möchte ja auch immer dazulernen ;-)
THX