Normalerweise übergibt man einen Speicherbereich, den man selbst reserviert hat,...
In dem konkreten Fall wäre die Art der Datenübergabe aber schon plausibel.
Es gibt ja offensichtlich mehrere Fehlermeldungen, die über einen
errorCode ausgewählt werden.
Die Strings liegen in dem Fall hartcodiert im Speicherbereich der
DLL und der Aufrufer bekommt lediglich einen Zeiger zurück.
Delphi-Quellcode:
function xyzErrMsg(errorCode : Word): PAnsiChar; stdcall; external xyzdll name 'ErrMsg';
var
Meldung : AnsiString; // nicht PAnsiChar !
Fehlernummer : Word;
Begin
Fehlernummer := 42; // nicht vergessen die Fehlernummer zu setzen!!!
Meldung := xyzErrMsg(Fehlernummer); // Zeiger auf 0-terminierten String wird automatisch in einen Delphi-String umgewandelt. (Compiler Magic)
ShowMessage(Meldung);
Bei dieser Version bekomme ich immer eine Zahl ( immer die gleiche, egal welchen Code ich übergebe ) zurück => 1180672
Gruss
McInternet