Zitat von
nitschchedu:
Das geht viel leichter in dem ich PChar nehme gibts null Probleme.
Das gibt bei einem solchen kleinen Prog wohl keine Probleme, aber trotzdem ist das Beispiel murks. Du gibst als Result einen PChar zurück. Diesen erhälst du aus einer temporären Umwandlung eines Strings. Der String wiederrum ist eine lokale Variable und verliert somit ihre Gültigkeit mit verlassen der Procedure. Damit wird mit dem Rücksprung aus deiner
DLL Procedure der String "test" ungültig und damit die von der temporären Umwandlung erzeugte PChar. Das der PChar vllt. noch richtig im Hauptprogramm ausgegeben wird bedeutet einfach nur, dass der Speicher wo die Daten des Strings "test" lagen noch nicht wieder erneut verwendet wurden. Das ist aber ein Spiel mit dem Feuer - da empfehle ich dir lieber Lotto, da sind die Gewinnchancen nicht so hoch, aber man hat bei einem Gewinn länger was davon als von dem Result deiner Funktion.
Der Code ist ein sehr gutes Beispiel wie man es nicht macht.
Frage dazu an dich, nitschchedu: Wenn dies so einfach ist, warum gibt es keine
WinAPI Funktion welche einen PChar zurück gibt sondern alle wollen einen Buffer und dessen Grösse haben, den sie dann vollschreiben.
Grundlegend könntest du deinen Code auch schnell und simpel richtig gestalten: Deklariere die Variable "test" global in der
DLL (somit verliert sie ihre Gültigkeit erst mit entladen der
DLL).
EDIT: Ein Tutorial dazu welches alles nötige erklärt und aufzeigt wie man es machen könnte:
Luckie's DLL String Artikel