AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Interface referenzen auf gleichheit prüfen?
Thema durchsuchen
Ansicht
Themen-Optionen

Interface referenzen auf gleichheit prüfen?

Ein Thema von maximov · begonnen am 11. Okt 2004 · letzter Beitrag vom 14. Okt 2004
 
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#1

Interface referenzen auf gleichheit prüfen?

  Alt 11. Okt 2004, 11:58
Moin,

ich bin gezwungen (von mir selbst) diverse interface-referenzen (COM) zu vergleichen, was sich als schwer heraustellt, da verschiednene ITypen verschiedene binäre-adressen auf ein und das selbe objekt haben.

Stark vereinfachter versuchsaufbau:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type

  // test typen

  iA = interface
    procedure A;
  end;

  TA= class(TInterfacedObject,iA)
  public
    procedure A;
  end;

  iB = interface(iA)
    procedure B;
  end;

  TAB = class(TA,iB)
  public
    procedure B;
  end;

  {*********************************************}

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    fA:iA;
    fB:iB;
    fRef:TAB;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FRef := TAB.Create; // object erzeugen, das einzige
  fB := fRef; // ref 1
  fA := fRef; // ref 2
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // hier sieht man, dass alle drei referenzen verschiedene addressen haben...
   memo1.Lines.Add(format('ref = %p | a = %p | b = %p',[pointer(fRef),pointer(fA),pointer(fB)]));
  // zB so: ref = 008D24E4 | a = 008D24F0 | b = 008D24F4
end;

{ TA }

procedure TA.A;
begin
  ShowMessage('A');
end;

{ TAB }

procedure TAB.B;
begin
  ShowMessage('B');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  fA.A;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  FB.B;
  FB.A;
end;

end.
das ergebnis wäre zB:
Code:
ref = 008D24E4 | a = 008D24F0 | b = 008D24F4
und ich sehe auch ein, dass das intern für die COM implementierung irgendwie so sein muss...

...ABER wie vergleicht man diese referenzen so, dass TRUE bei rumm kommt?

Danke, in erwartung
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
 


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 06:33 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