Parameter als PChar sind problemlos verwendbar, solange die übergebenen Zeichenketten in der
DLL nicht verändert werden.
Wieder auf String casten und dann verändern ist nicht zulässig.
Rückgabewerte aus der
DLL als PChar sind problematisch. Solange der Rückgabewert auf eine Constante oder einen Resourcestring verweist, ist das ok.
Delphi-Quellcode:
function MyDLLFunction(): PChar;
const
sc = 'ConstText';
var
s: string;
begin
s := MyInternFunction;
Result := PChar(s); // unzulässig da "s" nach verlassen der Funktion eventuell nicht mehr existiert
// <- wenn Referenzzähler von s auf 0 fällt, wird der String freigegeben, Result enthält einen ungültiger Zeiger
s := sc;
Result := PChar(s); // zulässig da "s" auf eine Konstante verweist
// Referenzzähler von String-Konstanten ist immer -1
end;
Also hier gibt es keine Probleme. Ich caste alles entsprechend, so wie dummzeuch es ja beschrieben hat. I.d.R. werden aber die PChar-Variablen unverändert einfach durch gereicht, von daher gibt es hier auch keine Veränderungen. Aber sollte es in einem anderen Fall dazu kommen, wird natürlich eine lokale Kopie erzeugt und mit der weiter gearbeitet.