Forum: .NET-Framework (managed code)
C#
by jaenicke,
19. Aug 2012
Da weißt du ja auch, dass es trotzdem zufällig funktioniert.
Ich meinte das auch eher für die Zukunft. Bei anderem Code funktioniert es vielleicht mal nicht und du suchst dir nen Wolf nach dem Fehler. :wink:
Damit das nicht als gutes Beispiel stehen bleibt, habe ich ja auch hauptsächlich etwas dazu geschrieben. Mit dem stdcall hattest du ja im Beispiel die entscheidende Stelle auch drin.
Forum: .NET-Framework (managed code)
C#
by jaenicke,
19. Aug 2012
Der Speicher, den du zurücklieferst, ist jedenfalls schon freigegeben, wenn der Funktionsaufruf zurückkehrt. (Durch die Referenzzählung des Strings dahinter)
Insofern ist der Rest des Codes ziemlich egal. Es funktioniert nur deshalb, weil an der Stelle im Speicher nichts geschrieben wird bis der String bei dir umkopiert ist. (Zum Beispiel durch Zuweisung an einen String.)
Sich darauf zu...
Forum: .NET-Framework (managed code)
C#
by jaenicke,
19. Aug 2012
Das Problem ist einfach das fehlende stdcall, das in dem Beispiel von EWeiss drin ist. Denn ohne Angabe der Aufrufkonvention wird bei .NET stdcall benutzt.
@EWeiss:
Einen PAnsiChar zurückzugeben ist mutig...
Wenn der Speicher bei der Verwendung in der aufrufenden Prozedur zufällig schon überschrieben ist, knallt es...