![]() |
Datenbank: egal • Version: 1 • Zugriff über: 1
Neuer type in (Data.)DB.pas
Hallo Zusammen!
Es haben sich seit Unicode ja die Type in der (Data.)DB geändert. Früher wurden die Buffer ja als PChar gespeichert. Jetzt jedoch als TRecordBuffer = PByte; Daher meine Frage: "Normalerweise" hat mal
Delphi-Quellcode:
Mal abgesehen davon, das StrAlloc veraltet ist und das
var
Buffer : PChar; begin Buffer := StrAlloc(Datensatzlaenge); // bla bla bla StrDispose(Buffer); end; Warnung: Wandeln Sie den Typ von Nicht-Zeichen-Zeigertypen nicht in PAnsiChar für die Zeigerarithmetik um. Verwenden Sie stattdessen den Zeigertyp PByte, der mit der Compiler-Direktive {$POINTERMATH ON} deklariert wird. Wie reserviere ich Speicher für ein PByte und gebe Ihn wieder frei? Getmem? Leider fehlt dann beim Free die Länge? Grüsse Mavarik :coder: PS.: Ich verzweifel noch an der Unicodeumstellung! |
AW: Neuer type in (Data.)DB.pas
Ich habe zwar noch nichts mit PByte zu tun gehabt, aber ich denke, mit GetMem/FreeMem bzw. GetMemory/FreeMemory sollte das zu machen sein.
|
AW: Neuer type in (Data.)DB.pas
Zitat:
Bei PChar ist das ja am offset-4 gespeichert... bei PByte dann mit Getmem aber nicht... Mavaik |
AW: Neuer type in (Data.)DB.pas
AllocMem und FreeMem
eine Beispielimplementierung findest Du in ADODB
Delphi-Quellcode:
>> TCustomADODataSet.AllocRecordBuffer
>> TCustomADODataSet.FreeRecordBuffer |
AW: Neuer type in (Data.)DB.pas
Zitat:
Du könntest auch ![]()
Delphi-Quellcode:
, bzw.
@MyBuffer[Low(MyBuffer)]
Delphi-Quellcode:
oder
@MyBuffer[0]
Delphi-Quellcode:
übergeben.
PByte(MyBuffer)
(dynamische Arrays sind ja auch "nur" Pointer) Oder direkt dataset.FieldByName('field').AsBytes ( ![]() Das Problem war ja, daß PChar total falsch gewählt wurde und bevor man dieses auf PAnsiChar umstellte, entschied man sich dann aber doch für das richtigere PByte. :stupid: |
AW: Neuer type in (Data.)DB.pas
Und ein Blick in die Hilfe wirkt manchmal Wunder. Der Size-Parameter beim FreeMem ist optional, bei FreeMemory gibt es den erst gar nicht ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 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 by Thomas Breitkreuz