Delphi-PRAXiS
Seite 4 von 9   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zugriffsverletzung ADSI, so was komisches hab ich noch nie.. (https://www.delphipraxis.net/146499-zugriffsverletzung-adsi-so-komisches-hab-ich-noch-nie.html)

Alter Mann 2. Feb 2010 06:57

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Moin, Moin

wodurch wird die ZV den ausgelöst, ist sEditedFields = nil?

Mal etwas anderes, warum fütterst du nicht ein ADSUser-Objekt und speicherst
alle Änderungen auf einmal?

Gruss

cherry 2. Feb 2010 07:18

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Zitat:

Zitat von Alter Mann
Moin, Moin

wodurch wird die ZV den ausgelöst, ist sEditedFields = nil?

Mal etwas anderes, warum fütterst du nicht ein ADSUser-Objekt und speicherst
alle Änderungen auf einmal?

Gruss

Hmmm...

weder

Delphi-Quellcode:
if not Assigned(sEditedFields) then
    ShowMessage('asdf');
noch
Delphi-Quellcode:
if sEditedFields = nil then
    ShowMessage('asdf');
Zeigen die Message an! > Ich kanns mir nicht erklären. Wahrscheinlich wird meine StringList durch die Kuriositäten von ADSI zerstört?!

Dein zweiter Vorschlag ist gut, ich werde das bei Gelegenheit so lösen. Aber ich möchte trotzdem rausfinden was hier das Problem ist! Hast du eine Idee? das gibts doch gar net!

cherry 3. Feb 2010 09:02

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Zitat:

Zitat von Alter Mann
Ganz einfach: Es wird mit Interfaces gearbeitet. Das 'schöne' daran das die Variablen freigegeben werden sobald sich nicht
mehr gebraucht werden(aus Sicht des Interface).

Anscheinend verhält sich das Ganze aber noch verrückter als bisher angenommen. Ich meine "sEditedFields" wird gar nie verwendet in einer Funktion die ADSI behandelt, aber es scheint so, als ob es trotzdem was vermurgst. Ich bin überzeugt, das meine aktuelle Zugriffsverletung auch durch ADSI ausgelöst wird.

Wie kannst du dir das erklären Alter Mann?

cherry 4. Feb 2010 05:54

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Habe nochmals intensiv an deiner Aussage hier:

Zitat:

Ganz einfach: Es wird mit Interfaces gearbeitet. Das 'schöne' daran das die Variablen freigegeben werden sobald sich nicht
mehr gebraucht werden(aus Sicht des Interface).
herumstudiert.

Die Lösung in diesem Falle war ja, eine Dummy Funktion aufzurufen, damit nur die Funktionsvariablen verschossen werden. Nun, ich verstehe aber nicht wie das Interface überhaupt was zerstören kann.
Ich übergebe ja nicht meine Variablen als Parameter, sondern nur eine Kopie dessen Werte. Wie zum Teufel soll das Interface mir dann z.B. ein Textfeld zerschiessen?

Und bei meinem etwas später aufgetauchten Problem werde ich noch weniger schlau daraus. Es wird mir eine TStringList zerschossen, die nicht mal in der Dummyfunktion verwendet wird. Woher weiss das Interface überhaubt, dass ein solches Objekt vorhanden ist? -Und noch besser wieso wird es zerschossen?

Ich bin momental echt am zweifeln ob es einen Sinn hat so weiter zu Programmieren?! Anscheinend eignet sich Delphi überhaupt nicht für AD sachen. Oder liegt es am AD ? ;-)

Alter Mann 4. Feb 2010 07:58

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Hi,

ich bin auch nicht der Interface-Guru, es ist aber so, dass du die Adresse übergibst an der der Inhalt deiner Variablen steht.
Diese Speicheradresse wird nun von dem Interface-Objekt für die jeweilige Aktion verwenden und anschließend freigegeben.

Der Vorteil, du musst dich nicht darum kümmern.

Die Lösung(?) aus dem Dilemma, keine Referenzen sonder 'echte' Kopien (move(StringList.Strings[I], Str, Length(StringList.Strings[I])).

Ich gebe hier nur meine Erfahrung mit ADSI wieder, bitte nicht als generelle Lösung sehen.

Gruss

cherry 4. Feb 2010 08:10

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Lieber Alter Mann

Ich bin froh, dass du diene Erfahrungen mit mir teilst. Ich hoffe du wirst das auch weiterhin tun. ;-) Denn ich verliere langsam aber sicher meinen Verstand, oder eben dass, was noch davon übrig geblieben ist.

1. Ich dachte wenn man bei einer Prozedur die Parameter per var übergibt ist es so wie du gesagt hast. Bei einer "normalen" übergabe, dachte ich, dass es den Wert kopiert.

2. Was ja komisch ist, ist, dass meine StringList gar nichts mit der ADSI Funktion zu tun hat. Und sie trotzdem verschossen wird. Was soll ich also einen Wert kopieren, ich übergebe ihn ja nirgens.
"(move(StringList.Strings[I], Str, Length(StringList.Strings[I]))" bringt mir ja nichts, die Stringlist verwende ich weder in der Dummy Funktion noch in der eigentlichen. Ich verwende die Liste nur in der Funktion in der die Dummy Funktion verwendet wird. >>> Wieso nur wird die Liste Verschossen, hast du da auch eine plausible Erklärung?

Danke schon mal ;-)

Dezipaitor 4. Feb 2010 11:28

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Sag mal, ist diese Unit mit TADSManager von dir?

cherry 4. Feb 2010 12:25

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Dezipaitor
Sag mal, ist diese Unit mit TADSManager von dir?

Ja isse. Kann mitunter schon auch an der liegen! > Hier noch mal separat im Anhang...

Dezipaitor 4. Feb 2010 12:33

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Also, wenn bei mir soetwas passiert, dann gehe ich meist so vor:

Eliminiere alles Unnötige. D.h. extrahiere die Essenz, also das Wesentliche in ein eigenes Projekt ohne Klasse, ohne tolle Tricks und teste es dort.

Die Referenzzählung kommt mir schon etwas suspekt vor, besonders da ich noch nie soetwas gesehen habe, dass nur mit NewInstance statt Create arbeitet. Insbesodere funktioniert die Referenzzählung eh nicht, da sie nie kleiner wird. Wie denn auch?

Also lass mal die Klassen beiseite und teste das AD Search separat.

cherry 15. Feb 2010 15:33

Re: Zugriffsverletzung ADSI, so was komisches hab ich noch n
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Dezipaitor
Also lass mal die Klassen beiseite und teste das AD Search separat.

Ok, nach einer Woche Ferien habe ich das jetzt mal gemacht. Ich habe eine neue Testanwendung erstellt mit den Funktionen die Ich testen will.
Dabei ist nun jeglicher Komfort weg, insbesondere halt auch beim GUI...

Bis jetzt hab ich es so verstanden: ADSGetObject zerschiesst mir die Parameter nachdem ADSGetObject diese nicht mehr benötigt.
Dies kann man umgehen indem man die eigentliche Funktionen in DummyFunktionen ausführt. Dies führt dazu, dass nicht die eigentlichen Parameter, sondern die der Dummyfunktion
zerschossen werden, somit kann ich nach dessen Betätigung immer noch auf meine Objekte zugreiffen.

Dies hat eine ganze Weile funktioniert und ich habe einigermassen verstanden wieso und konnte das auch "elegant" (naja, nicht wirklich) umgehen...

Jetzt aber die Ausnahme:

Delphi-Quellcode:
 
  // Benutzer verschieben
  if sEditedFields.IndexOf('EdContainerPath') > -1 then
  begin
    if DummyMoveUser(sOldObjectPath, EdContainerPath.Text) then
      txt := txt + '> Benutzer erfolgreich verschoben' // KEINE ZUGRIFFSVERLETZUNG
      //txt := txt + '> Benutzer erfolgreich von "'+sOldObjectPath+'" nach "'+EdContainerPath.Text+'" verschoben' // ZUGRIFFSVERLETZUNG
    else
      txt := txt + '(!) Benutzer konnte nicht verschoben werden.';
  end;
Es funktioniert wenn ich anschliessend nicht auf die Parameter sOldObjectPath und EdContainerPath.Text zugreiffe, wenn ich das tue gibts die alt Bekannt Zugriffsverletzung...

Ich bitte also wieder mal mehr um eure Mithilfe, denn ich frag mich langsam was mit mir los ist. Oder ob es an Delphi liegt? ich steck im Sumpf, holt mich hier raus! :-D

Danke schon ma...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.
Seite 4 von 9   « Erste     234 56     Letzte »    

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