![]() |
Wenn of object, dann knallts!!!
Hallo, ich habe folgende Funktion:
Delphi-Quellcode:
type
TGetLdapDomain = procedure(ldap: string) of object;
Delphi-Quellcode:
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...
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; (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. |
Re: Wenn of object, dann knallts!!!
Meinst du vielleicht TObject?
|
Re: Wenn of object, dann knallts!!!
Wie rufst du denn GetLDAPDomains auf, bzw. wie ist die dort angegebene Prozedur definiert?
|
Re: Wenn of object, dann knallts!!!
Zitat:
Delphi-Quellcode:
die Message erscheint zwar noch korrekt, anschliessend gibts aber dann ne Access Violation...
procedure TForm1.getLdapDomain(domain: string);
begin showMessage(domain); end; ... GetLDAPDomains(getLdapDomain); |
Re: Wenn of object, dann knallts!!!
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 ^^ |
Re: Wenn of object, dann knallts!!!
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:
dies mache:
procedure TForm1.getLdapDomain(domain: string);
begin showMessage(domain); end;
Delphi-Quellcode:
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!!!!
procedure TForm1.getLdapDomain(domain: string);
begin myList.Add(domain); end; |
Re: Wenn of object, dann knallts!!!
Zitat:
Naja, lass mal das "TForm1." weg und probier es dann nochmal mit globalen variablen. |
Re: Wenn of object, dann knallts!!!
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???? |
Re: Wenn of object, dann knallts!!!
Zitat:
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:
Kannst du ja mal testen. :wink:
procedure getLdapDomain(domain: string; const TheForm: TForm1);
begin TheForm.myList.Add(domain); end; 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. :stupid: |
Re: Wenn of object, dann knallts!!!
Mal ne böse Frage..
Existiert das Objekt eigentlich, zu dem die Callback-Methode gehört? Grüße, Lutz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz