AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Speicherfehler bei Funktionsübergabe mit PWideChar in DLL
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherfehler bei Funktionsübergabe mit PWideChar in DLL

Ein Thema von delphin · begonnen am 31. Okt 2004 · letzter Beitrag vom 5. Dez 2004
Antwort Antwort
delphin

Registriert seit: 21. Aug 2003
Ort: Chemnitz
29 Beiträge
 
Delphi 7 Professional
 
#1

Speicherfehler bei Funktionsübergabe mit PWideChar in DLL

  Alt 31. Okt 2004, 23:12
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 ?
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: Speicherfehler bei Funktionsübergabe mit PWideChar in DL

  Alt 5. Dez 2004, 21:45
Ü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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 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