als erstes solltest Du die
Exporte auch mit stdcall aufrufen.
Nee, wieso denn?
Es ist nur wichtig, dass auf beiden Seiten die Schnittstellen gleich aussehn
und wenn hier EXE und
DLL mit Delphi geschrieben sind, dann kann die Aufrufkonvention auch problemlos "register" bleiben.
Was man aber nicht machen darf, ist einen PWideChar wie einen String aussehn zu lassen.
DelphiStrings sind zwar intern zu PChar kompatibel (
PChar(String)
ist also OK), aber andersrum natürlich nicht (niemals
String(PChar)
).
Und wenn in der
DLL ein String in einen PChar gecastet wurde, dann darf der dennoch nicht zurück nach String gecastet werden.
* Die speicherverwaltung von
DLL und EXE sind standardmäßig getrennt (jeder hat seine Eigene)
* und bei Strings gibt es den Sonderfall des Leerstrings, wo der
PChar(String)
-Cast auf eine Konstante mit dem Inhalt #0#0 umleitet.