AGB  ·  Datenschutz  ·  Impressum  







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

Pointer geht verloren

Ein Thema von Neutral General · begonnen am 3. Mär 2007 · letzter Beitrag vom 4. Mär 2007
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Pointer geht verloren

  Alt 3. Mär 2007, 18:08
Hi,

Mein Plugin ruft bei der Ausführung TApp.GetEditor.Clear auf. Das funktioniert auch. Einmal... Beim zweiten mal ist FEditor irgendwie nil o.O -> AV.

Dieser Quelltext ist jetzt aus der Anwendung selbst.

Delphi-Quellcode:
TApp = class(TInterfacedObject,IApp)
  private
     FEditor: IEditor;
  public
    constructor Create;
    function GetEditor: IEditor; stdcall;
    procedure Terminate; stdcall;
  end;

  TEditor = class(TInterfacedObject,IEditor)
  private
    FEditor: TMemo;
  public
    constructor Create(AEditor: TMemo);
    procedure Clear; stdcall;
    procedure SetContent(const Value: WideString); stdcall;
    function GetContent: WideString; stdcall;
  end;

constructor TApp.Create;
begin
  inherited Create;
  FEditor := TEditor.Create(Form1.Memo1);
end;

function TApp.GetEditor: IEditor;
begin
  Result := FEditor; // Batsch (beim 2. mal)
end;

constructor TEditor.Create(AEditor: TMemo);
begin
  inherited Create;
  FEditor := AEditor;
end;

procedure TEditor.Clear;
begin
  FEditor.Lines.Clear;
end;
Wie ist denn das zu erklären ? o.O

Ich habs doch eigentlich genauso gemacht wie jbg hier auch.

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Pointer geht verloren

  Alt 3. Mär 2007, 18:20
Also es ist nur ne Vermutung.

Aber wenn du das

function TApp.GetEditor: IEditor; Aufrufst und einer Variable zuweist dann darfst du bei dieser kein Free machen. Denn der Pointer COpiert das Object ja nicht sondern gibt nur eine 2. Referenz

wenn du dann das 2. mal drauf zugreifen willst zeigt dein
FEditor auf einen bereits Freigegebenen Speicherplatz und das erzeugt dann die AV.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Pointer geht verloren

  Alt 3. Mär 2007, 18:23
Ich gebe FEditor: IEditor ja niemals frei...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Pointer geht verloren

  Alt 3. Mär 2007, 18:36
Eigentlich solltest du den Editor (im PlugIn) sogar freigeben(bzw. nur einmal holen und dann behalten) (bzw. aus dem Scope laufen lassen). Denn Result := FEditor sollte ja schon ein _AddRef auslösen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Pointer geht verloren

  Alt 3. Mär 2007, 18:41
Im Plugin:

Delphi-Quellcode:
var
  Edit: IEditor;

{ TPlugin }

function TPlugin.Execute(App: IApp): Integer;
begin
  Result := 1;
  if Edit = nil then
    Edit := App.GetEditor;
  Edit.Clear;
end;
So hab ichs jetzt gemacht. Hast du das so gemeint?
Jedenfalls klappts trotzdem nicht...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Pointer geht verloren

  Alt 3. Mär 2007, 18:44
OK, scheint zu passen. Ich hoffe du nillst "Edit" irgendwo am Anfang? Da es ne globale Variable ist, kannst du sie auch auf "=nil" initialisieren.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Pointer geht verloren

  Alt 3. Mär 2007, 18:47
Zitat von DGL-luke:
OK, scheint zu passen. Ich hoffe du nillst "Edit" irgendwo am Anfang? Da es ne globale Variable ist, kannst du sie auch auf "=nil" initialisieren.
Jo hab ich jetzt auch gemacht.. Aber das ändert an der ganzen Sache nicht wirklich was

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Pointer geht verloren

  Alt 3. Mär 2007, 18:49
Tja, ich bin am Ende meines Lateins.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Pointer geht verloren

  Alt 4. Mär 2007, 11:29
function Execute(App: IApp): Integer; stdcall; So Leute schaut euch das mal an.. Was fällt euch auf ? .... Und?

RICHTIG



function Execute(const App: IApp): Integer; stdcall; -.-^^

Naja aber so lernt mans...

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:45 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