Zu der Deklaration:
function Run: PChar; stdcall; export;
Es hat schon Gründe weshalb das in der Windows
API nicht so gemacht wird. Wenn, kannst du das mit WideStrings machen, aber so funktioniert es eher zufällig. Denn Delphi räumt den Speicher am Ende der Methode natürlich wieder auf, so dass du einen Pointer auf einen schon freigegebenen Speicherplatz zurücklieferst. Dass das funktioniert, liegt nur daran, dass der Speicher zufällig noch nicht überschrieben ist, wenn er danach benutzt wird. (Vermutlich weil er an einen String zugewiesen und damit sofort kopiert wird.)
Leider ist das dank des Services und der
DLL nicht so leicht zu debuggen!
Habt ihr eine Idee?
Idee 1: Projektgruppe erstellen,
DLL und Service an Anwendungspfade kompilieren, Service starten, den Debugger per Menü
Run -> Attach to process verbinden.
Delphi muss dafür natürlich mit Adminrechten gestartet werden um den Debugger an einen im Systemkontext ausgeführten Dienst anzuhängen, sonst gibt es Fehler 5 (unzureichende Rechte).