![]() |
dynamisches Array, wo wird die Länge gespeichert ?
Hallo #,
wo speiuchert Delphi intern die Länge eines dyn. Arrays ? Bsp.
Delphi-Quellcode:
Ich möchte nicht wissen, dass ch mit Length(a) die Länge ermitteln kann,
var
a: array of Byte; bgin SetLength(a,100); sondern wie Delphi das intern macht. Ich habe hier ein Problem mit einem DLL-Aufruf, wie ein Speicherbereich benötigt wird. Das kann ist mit einem dyn. Array (array of Byte) gemacht worden. Am Ende der Prozedur meckert FastMM4, dass der Speicherblock korrupt ist. Vor dem Umbau auf PChar würde ich schon gern wissen, wie weit die DLL hier Mist macht. PS: Dass es die DLL ist ist eine Vermutung (ct_api), bei allen anderen ctapi-DLL's klappt alles. Danke Heiko |
AW: dynamisches Array, wo wird die Länge gespeichert ?
Die steht in den 4 Bytes (als Integer) vor der Adresse vom ersten Arrayelement.
Delphi-Quellcode:
(ungetestet)
Length := PInteger(Integer(@MyArray[0])-4)^;
|
AW: dynamisches Array, wo wird die Länge gespeichert ?
siehe Unit System:
Delphi-Quellcode:
Die dyn. Array-Variable ist ein Zeiger auf den Anfang der enthaltenen Daten
{ Dynamic array helper functions }
procedure _DynArrayHigh; procedure _DynArrayClear(var a: Pointer; typeInfo: Pointer); procedure _DynArrayLength; procedure _DynArraySetLength; procedure _DynArrayCopy(a: Pointer; typeInfo: Pointer; var Result: Pointer); procedure _DynArrayCopyRange(a: Pointer; typeInfo: Pointer; index, count : Integer; var Result: Pointer); procedure _DynArrayAsg; procedure _DynArrayAddRef;
Delphi-Quellcode:
Wobei es egal ist, wie ein dyn. Array verwaltet wird.
record
refCount: Integer length: Integer data: array[0..x] of ...; end; P := @data[0]; - dynamische Arrays, Strings und Objekte sollten nicht über DLL-Grenzen hinweg verwaltet werden. (abgesehn BPLs sind im Spiel) - SetLength macht selber nichts kaputt Wenn, dann hat du wo Anders ein Problem. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz