Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Speicherfehler bei Funktionsübergabe mit PWideChar in DLL (https://www.delphipraxis.net/33047-speicherfehler-bei-funktionsuebergabe-mit-pwidechar-dll.html)

delphin 31. Okt 2004 23:12


Speicherfehler bei Funktionsübergabe mit PWideChar in DLL
 
Hallo

ich möchte an eine gehookte API-Funktion mit einem Parameter des Types PWideChar der Art:

Code:
orginal_API_Function(..., Param3 : PWideChar);
einen selbst zusammengestellenten Pfad-String übergeben.

nach Übergabe der Zeiger auf die gehookte Procedure funktioniert soweit als auch ganz prächtig, bis auf den Punkt des Aufrufes der orginal_API_Function

Delphi-Quellcode:
function my_API_function(..., Param3 : PWideChar): bool; stdcall;
Var Pfad : WideString;
begin .
      .
      //== Zuweisen des Pfades ====
      Pfad:='C:\TEST.BAT';
      Param3:=@Pfad[1]
      //== Aufruf der Orginalfunktion mit Übergabe des Parameters
      result:=orginal_API_Function(..., Param3);
end;
Meistens klappt der Funktionsaufruf, aber gelegentlich meldet Windows "einen Fehler beim Schreiben im Speicher". Ich vermute, dass ich Param3 noch mit GetMemory (?) freien Speicher zuweisen müßte, damit der Zeiger nicht auf einen undefinierten Speicherbereich zeigt. Wiederum wird Param3 ja schon durch die Orginal_API_Funktion im Speicher reserviert, obwohl der übergebene PWideChar meistens auf einen leeren String zeigt.
Das Problem ist, dass die Funktion in einer DLL eingebunden ist und so hart zum Absturt führt, dass dann automatisch ein Neustart erfolgt.

Wie bringt man den Funktionsaufruf (String - PWideChar) nur ins Reine ?

Assarbad 5. Dez 2004 21:45

Re: Speicherfehler bei Funktionsübergabe mit PWideChar in DL
 
Übergib mal bitte direkt @Pfad[1] statt Param3. Könnte sein, daß der Compiler meint, du würdest den String "Pfad" nicht mehr verwenden und ihn "wegoptimiert". Also Vorsicht.

Sag mal bescheid obs funzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz