Wenn du check_ini bereits über
external einbindest, dann macht der ganze LoadLibrary/GetProcAddress Code überhaupt keinen Sinn mehr. Denn wenn Windows die DLL beim Laden nicht findet, kommt die Standard-Windows-Fehlermeldung über nicht gefundene Symbole in einer DLL.
Den ganzen LoadLibrary/GetProcAddress Code kannst du also schon mal streichen.
Der nächste Fehler ist, dass du einen String an die DLL übergibst. Wie Luckie bereits schrieb, solltest du dir mal den Kommentar, den Delphi in der .dpr Datei hinterlassen hat, mal genau durchlesen. Wenn du das getan hast, wirst du feststellen, dass man keine Strings oder dynamischen Arrays direkt oder indirekt (Records, Klassen) an eine DLL übergeben soll, weil der Speichermanager der Anwendung nicht der Speichermanager der DLL ist, und man nie genau weiß, welcher der beiden Speichermanager den String nun allokiert oder freigegeben hat.
Das mit dem ParamStr() lässt sich dadurch erklären, dass durch Zufall der von der Anwendung reservierte, aber von der DLL freigegebene String nicht sofort überschrieben wird. Das ist aber reiner Zufall und kann sich sehr schnell ändern.
Wenn du Strings übergeben willst, gibt es drei Möglichkeiten:
- PChar statt String benutzen
- Die ShareMem Unit, wie es im Delphi-DLL-Kommentar steht, nutzen
- Die DLL und die EXE an das RTL-Package binden (Projekt-Optionen/Packages/Mit Laufzeitpackages kompilieren).