![]() |
Problem mit Zeigern
Hallo,
ich verwende hier eine API-Funktion(OemToCharBuff) die als Parameter PAnsiChar erwartet und ANSI-Text in OEM-Text umwandelt: Auszug aus meiner Procedur:
Delphi-Quellcode:
wobei Title und OEMTitle vom Typ PAnsiChar sind.
If isUseOEM then
begin Title:= PChar(QueryRef.FieldByName('aString').AsString); getMem(OEMTitle, length(Title)); OemToCharBuff(Title, OEMTitle, Length(Title)); FormSelectedTitles.ListBoxFoundTitles.Items.Add(OEMTitle); FreeMem(OEMTitle); end Wenn ich die Procedure zum ersten Mal aufrufe funzt es einwandfrei. Rufe ich sie ein zweites Mal auf, bekomme ich zwar auch meinen umgewandelten Text, dahinter stehen dann aber oft noch merkwürdige Sonderzeichen wie ein § oder ein A mit Dach oder ähnliches. Was mache ich denn hier noch falsch? Gruß Gambit |
Re: Problem mit Zeigern
Ich würde es mal mit getMem(OEMTitle, length(Title)+1); versuchen. Begründung: Es sind nullterminierte Strings. Das bedeutet du brauchst immer noch ein Zeichen für den Nullterminator, damit der String korrekt beendet ist.
|
Re: Problem mit Zeigern
Jau, das wars! Danke! Wär ich so wohl nicht drauf gekommen, leuchtet aber völlig ein...
Gruß Gambit |
Re: Problem mit Zeigern
Du brauchst dich nicht mit GetMem, FreeMem und Zeigern zu plagen.
Mit den Delphidatentyp AnsiString geht das viel einfacher:
Delphi-Quellcode:
var
title, OEMtitle : AnsiString; begin Title:= QueryRef.FieldByName('aString').AsString; // Speicher für Ziel reservieren SetLength(OEMtitle, Length(title); OemToCharBuff(PChar(Title), PChar(OEMTitle), Length(Title)); FormSelectedTitles.ListBoxFoundTitles.Items.Add(OEMTitle); end |
Re: Problem mit Zeigern
Aha! Nochmals Danke! und wann bzw. wofür benutzt man denn new und dispose?
|
Re: Problem mit Zeigern
Für dynamische Datenstrukturen. Verkettete Listen, Ringe, binäre Bäume usw.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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