Hallo,
ich habe eine Frage zu Strings und DLLs bzw. zum Casting von PChar in String.
Ich habe eine DLL, die mir einen PChar als Ergebnis liefert. Den Speicherbereich des PChars habe ich vorher selbst angelegt. Anschließend caste ich den PChar in einen String.
Jetzt meine Frage: Wird bei diesem Cast eine Kopie erstellt oder wird einfach nur mit der Adresse gearbeitet? Wenn eine Kopie erstellt wird, muss der Speicher des PChars wieder freigegeben werden. Wird keine Kopie erstellt, erhöht sich der String-Zähler und der Speicherbereich wird automatisch freigegeben, richtig?
Zur Veranschaulichung ein bisschen Code:
Entscheidend ist die auskommentierte Zeile. Ist sie nötig oder nicht?
ich habe eine Frage zu Strings und DLLs bzw. zum Casting von PChar in String.
Ich habe eine DLL, die mir einen PChar als Ergebnis liefert. Den Speicherbereich des PChars habe ich vorher selbst angelegt. Anschließend caste ich den PChar in einen String.
Jetzt meine Frage: Wird bei diesem Cast eine Kopie erstellt oder wird einfach nur mit der Adresse gearbeitet? Wenn eine Kopie erstellt wird, muss der Speicher des PChars wieder freigegeben werden. Wird keine Kopie erstellt, erhöht sich der String-Zähler und der Speicherbereich wird automatisch freigegeben, richtig?
Zur Veranschaulichung ein bisschen Code:
Code:
function Read_STRING(Handle: THandle): string; var Buffer: PChar; BufferLength: Int64; begin BufferLength := Read_STR(Handle, Nil, 0); GetMem(Buffer, BufferLength + 1); Read_STR(Handle, Buffer, BufferLength); Result := string (Buffer); //FreeMem(Buffer); end;