AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wenn of object, dann knallts!!!

Offene Frage von "ele"
Ein Thema von cherry · begonnen am 12. Nov 2009 · letzter Beitrag vom 21. Mai 2012
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 12:40
Hallo, ich habe folgende Funktion:

Delphi-Quellcode:
  type
    TGetLdapDomain = procedure(ldap: string) of object;
Delphi-Quellcode:
procedure GetLDAPDomains(CallBack: TGetLdapDomain);
var
  NSContainer : IADsContainer;
  Enum : IEnumVariant;
  hr : integer;
  varArr : OleVariant;
  lNumElements : ULONG;
  ADsItem : IADs;
begin
  NSContainer := nil;
  Enum := nil;
  ADsGetObject('LDAP:', IID_IADsContainer, NSContainer);
  hr := ADsBuildEnumerator(NSContainer, Enum);
  while SUCCEEDED(hr) do
  begin
    hr := ADsEnumerateNext(Enum, 1, varArr, lNumElements);
    if (lNumElements<=0) then Break;
    IDispatch(varArr).QueryInterface(IID_IADs, ADsItem);
    CallBack(ADsItem.ADsPath);
    //ADsItem.Class_;
  end;
  //if Enum <> nil then
   // hr := ADsFreeEnumerator(Enum);
  VariantClear(varArr);
end;
Wenn nun die CallBackFunktion of object ist, dann knallts... Wenn die CallBackFunktion nicht of Object mache, knallts nicht. Aber ich muss Sie of object machen, da sie zu einer Klasse gehören soll...

(mit knallt es meine ich eine Access Violation)

Ein weiteres Phänomen ist, wenn ich hr := ADsFreeEnumerator(Enum) wieder in den Code aufnehme, dann knallts so oder so...

An was kanns liegen? Testet doch die Procedur mal bei euch....

Danke schon mal im Voraus.
PS: Guten Appetit.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 12:44
Meinst du vielleicht TObject?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#3

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 12:47
Wie rufst du denn GetLDAPDomains auf, bzw. wie ist die dort angegebene Prozedur definiert?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 13:26
Zitat von himitsu:
Wie rufst du denn GetLDAPDomains auf, bzw. wie ist die dort angegebene Prozedur definiert?
Delphi-Quellcode:
procedure TForm1.getLdapDomain(domain: string);
begin
  showMessage(domain);
end;

...

GetLDAPDomains(getLdapDomain);
die Message erscheint zwar noch korrekt, anschliessend gibts aber dann ne Access Violation...
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 13:50
Müsstest du nicht erst ne Zuweisung machen?
Und: Wie soll die denn zu ner Klasse gehören?
Ich blicke bei deinem Problem nicht ganz durch ^^
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#6

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 13:59
Probiert doch die Funktion einfach mal aus, dann seht ihr schon was ich meine... Ich kanns selber fast nicht erklären...

Wenn ich z.B

statt
Delphi-Quellcode:
procedure TForm1.getLdapDomain(domain: string);
begin
  showMessage(domain);
end;
dies mache:
Delphi-Quellcode:
procedure TForm1.getLdapDomain(domain: string);
begin
  myList.Add(domain);
end;
dann gehts auch, sobald ich aber dann auf die myList zugreiffen will, gibts ne böse Access Violation und ich weiss nicht woher die kommt!!!!
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 14:05
Zitat von cherry:
Delphi-Quellcode:
procedure TForm1.getLdapDomain(domain: string);
begin
  myList.Add(domain);
end;
Wie war das bei Callbacks? Man darf nicht auf private/objektspeziefische Sachen zugreifen? (Ich mein da was im Hinterkopf zu haben, arbeite damit aber zu wenig)

Naja, lass mal das "TForm1." weg und probier es dann nochmal mit globalen variablen.
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 14:14
Hmm... ist komisch. Ja es geht wenn die myList nicht TForm gehört, wie greiffe ich dann aber von einem andern Formular darauf zu?

Und das mit der CallBackFunction habe ich nur gemacht, weil es anders auch nicht geht. Die Procedure scheint nur dann keine Zugriffsverletzung zu geben, wenn ich keine listen oder variablen abfülle, die eben einer Klasse z.B. TForm1 angehören, egal ob mit Rückgabewert, var Patameter, Parameter oder eben CallBackFunction... irgendwo scheint etwas ganz Faul zu sein, aber was????
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 14:25
Zitat von cherry:
Hmm... ist komisch. Ja es geht wenn die myList nicht TForm gehört, wie greiffe ich dann aber von einem andern Formular darauf zu?
Die Frage hab mich mir damals auch gestellt. Nachher kam irgendwas komisches dabei raus. (Ich find das Projekt leider nicht mehr)

Aber stell dir das doch mal so vor: Du versuchst von einem Objekt auf eine private Variable von einem anderem Objekt zuzugreifen. Das geht nicht, nur bei den Callbackfunktionen beanstandet der Kompiler das nicht.

Soweit ich weiß hab ich damals eine globale Property von der Variable die ich in der CllBck-Mthd brauchte erstellt und dieser dann auch noch die Instanz des Objekts mitübergeben. So konnte ich dann in der Callback-Methode über diese Instanz auf die property zugreifen.

edit:
Also bei dir säh das dann so aus:
Delphi-Quellcode:
procedure getLdapDomain(domain: string; const TheForm: TForm1);
begin
  TheForm.myList.Add(domain);
end;
Kannst du ja mal testen.
Unschön, aber man hat wenigstens keine Unit-globale Variable. (nur den neuen Zugriff auf die eigentlich private Variable)
Eine sauberere Alternative würde mich auch interessieren.
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

Re: Wenn of object, dann knallts!!!

  Alt 12. Nov 2009, 14:52
Mal ne böse Frage..

Existiert das Objekt eigentlich, zu dem die Callback-Methode gehört?

Grüße,

Lutz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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:49 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