Einzelnen Beitrag anzeigen

Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#5

Re: Interface und Zugriffsverletzung

  Alt 22. Jul 2007, 14:24
Zitat von hoika:
Hallo,

> ich seh nix

beim Verlassen des Gültigkeitsbereiches eines
Interfaces wird nicht nur das Interface "gelöscht",
sondern auch das betroffene Objekt gelöscht.

Abhilfe bringt nur _AddRef und Release zu überschreiben
und dort nichts tun (Referenzzählung deaktivieren).
das hab ich ja gemacht...
Delphi-Quellcode:
//anwendungsseite
function TApp._AddRef: Integer; stdcall;
begin
  //
end;

function TApp._Release: Integer; stdcall;
begin
  //
end;

function TMemoWrapper._AddRef: Integer;
begin
  //
end;

function TMemoWrapper._release: Integer;
begin
  //
end;

//plugin-seite
function TPlugin._AddRef: Integer;
begin
  //
end;

function TPlugin._release: Integer;
begin
  //
end;
die variable app:TApp ist im Gültigkeitsbereich der form, ist auch im destroy des forms korrekt gesetzt (inkl. Interface auf Ieditor), wo es dann freigegeben wird. Es kommt auch keine nil-pointer exception beim beenden mehr...

muss ich vor dem freigeben der dll das TPlugin-Objekt irgendwie freigeben, oder reicht das per nil-Zuweisung beim Interface anwendungsseitig? (habs zumindest nicht ohne AV hinbekommen)

Zitat von hoika:
Ein Interface wird normalerweise freigegeben,
wenn es auf NIL gesetzt wird.

Probier mal mit memcheck, ob das reicht.

Ich hatte nach dem einen Test so die "Schnauze voll",
dass ich erst wieder was mit machen werden,
wenn delphi.net bei uns ansteht.
vielleicht findet ja auch jemand anderes Lust, der sich auskennt
gibt sicher ne ganz triviale lösung...so umfangreich ist es ja (noch) nicht...kanns nur nicht richtig nachvollziehen, warum die AV kommt. Muss man evtl irgendwas festes bei den beiden funktionen zurückgeben? weil so sind die ja undefiniert...

Gruß Frank
  Mit Zitat antworten Zitat