Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Probleme mit Zeigern (https://www.delphipraxis.net/27267-probleme-mit-zeigern.html)

endeffects 6. Aug 2004 18:36


Probleme mit Zeigern
 
Hallo,

ich hab ein Problem mit einem Zeiger, und zwar möchte ich
in einem IExplorer Plugin z.B. Header den abändern.

ich hab mich dafür an einer routine orientiert die
die flag zum abrechen des requests von der Methode BeforeNavigate2
auf true setzt:

Delphi-Quellcode:
      void BeforeNavigate2(
        IDispatch *pDisp,            --> rgvarg[6]
        VARIANT *URL,                --> rgvarg[5]
        VARIANT *Flags,              --> rgvarg[4]
        VARIANT *TargetFrameName, --> rgvarg[3]
        VARIANT *PostData,           --> rgvarg[2]
        VARIANT *Headers,            --> rgvarg[1]
        VARIANT_BOOL *Cancel          --> rgvarg[0]
      );
Delphi-Quellcode:
      PDispParams(Params)^.rgvarg[0].pbVal^ := 1; // Cancel flag = True
Nun hab ich mit folgendem Code versucht beispielsweise den Header
zu ändern bevor dieser als Request gesendet wird:

Delphi-Quellcode:
PDispParams(Params)^.rgvarg[1].pvarVal^:= 'Language: de';
wenn ich das versuche springt aber wärend des kompilierens das cpu debug
fenster auf =(, weiß jemand vielleicht wo der fehler steckt?

Hansa 6. Aug 2004 18:49

Re: Probleme mit Zeigern
 
Das ^ ist der Inhalt des Zeigers. Bei dir kommt das aber 2mal vor. Bist du dir sicher, daß das erste ^ Zugriff auf das zweite ^ hat ?

endeffects 6. Aug 2004 19:03

Re: Probleme mit Zeigern
 
naja, also bei der cancel flag scheint das so zu funktionieren,
ich weiß allerdings nicht wie ich das testen könnte

endeffects 6. Aug 2004 19:06

Re: Probleme mit Zeigern
 
die gesendete url frag ich ja auch ohne probleme wie folgt ab:
PDispParams(Params)^.rgvarg[5].pvarVal^

liegt es vielleicht daran das ich möglicherweise einen
overrun für den reservierten speicher erzeuge?

Hansa 6. Aug 2004 19:15

Re: Probleme mit Zeigern
 
1. Frage : was ist ein Overrun ?
2. Frage : bist du dir sicher zu wissen, was du da genau machst und was ein Pointer ist ?

Sehe ich das richtig, daß da noch ein Array im Spiel ist ? Ohne genaue Deklarationen wird wohl keiner da helfen können.

endeffects 6. Aug 2004 19:24

Re: Probleme mit Zeigern
 
also das array ist wie anfangs erwähnt wie folgt aufgebaut:

Zitat:

void BeforeNavigate2(
IDispatch *pDisp, --> rgvarg[6]
VARIANT *URL, --> rgvarg[5]
VARIANT *Flags, --> rgvarg[4]
VARIANT *TargetFrameName, --> rgvarg[3]
VARIANT *PostData, --> rgvarg[2]
VARIANT *Headers, --> rgvarg[1]
VARIANT_BOOL *Cancel --> rgvarg[0]
);
die BeforeNavigate2 Methode ist wie folgt deklariert

Delphi-Quellcode:
procedure BeforeNavigate2(const pDisp: IDispatch; var URL: OleVariant; var Flags: OleVariant;
                              var TargetFrameName: OleVariant; var PostData: OleVariant;
                              var Headers: OleVariant; var Cancel: WordBool);
was mich aus dem mitgelieferten beispiel nun verwirrt ist das
man die flag zum canceln des request ändern kann,
das aber bei jedem anderen parameter beim compilieren
der debugger aufgerufen wird

soll heißen wenn ich folgendes in den code einbaue wird der
request nicht gesendet
Delphi-Quellcode:
PDispParams(Params)^.rgvarg[0].pbVal^ := 1; // Cancel flag = True
wenn ich aber versuche z.b. die url zu ändern mit hilfe von
Delphi-Quellcode:
PDispParams(Params)^.rgvarg[5].pvarVal^:= 'http://www.domain.com';
dann meckert der debugger, andersrum kann ich aber über den selben zeiger
die url ausgeben lassen

endeffects 6. Aug 2004 19:49

Re: Probleme mit Zeigern
 
ich hab nun nochmal folgendes probiert:

Delphi-Quellcode:
var
  Header: OleVariant;
begin
  Header:= 'TestValue: empty';
  PDispParams(Params)^.rgvarg[1].pvarVal^:= Header;
das läuft dann zwar durch, aber im packet taucht davon nichts auf

:wiejetzt:

Hansa 6. Aug 2004 19:59

Re: Probleme mit Zeigern
 
Wie sieht es außerhalb der IDE aus ? Was kommt da statt des Debug-Fensters ? Falls was anderes als "Access-Violation" kommt, bitte posten.

endeffects 6. Aug 2004 20:15

Re: Probleme mit Zeigern
 
Zitat:

wenn ich aber versuche z.b. die url zu ändern mit hilfe von
PDispParams(Params)^.rgvarg[5].pvarVal^:= 'http://www.domain.com';
dann meckert der debugger, andersrum kann ich aber über den selben zeiger
das passiert nur solange ich das plugin über regsvr32 registriert habe,
wenn ich die dll nun nach dem kompilieren registriere dann werden
die änderungen die durch das plugin vorgenommen werden soll völlig ignoriert

in beiden fällen, ob nun über var header: olevariant oder beim direkten ändern
werden die änderungen auch außerhalb der ide ignoriert

Hansa 6. Aug 2004 20:51

Re: Probleme mit Zeigern
 
Kommt keine Fehlermeldung außerhalb der IDE ? Würde mich allerdings wundern. Noch eine Frage : hast du vorher eventuell mit C oder Javascript schon gearbeitet ? Also vor Delphi ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Seite 1 von 2  1 2      

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