CORBA-Interfaces mit und ohne Identifier

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

CORBA-Interfaces mit und ohne Identifier

Beitrag von m.fuchs »

Moin,

durch einen Beitrag von corpsman bin ich auf diese Problematik gestoßen.

Ich habe folgendes Programm:

Code: Alles auswählen

program Project1;
{$MODE ObjFpc}
{$H+}
{$Interfaces Corba}

uses
  Classes, SysUtils;

type
  IFirst = interface
    procedure First;
  end;

  ISecond = interface
    procedure Second;
  end;

  TMyClass = class(TObject, IFirst, ISecond)
    public
      procedure First;
      procedure Second;
  end;

procedure TMyClass.First;
begin
  WriteLn('first');
end;

procedure TMyClass.Second;
begin
  WriteLn('second');
end;

var
  o: TObject;
  first: IFirst;
  second: ISecond;

begin
  o := TMyClass.Create;
  if o is IFirst then begin
    first := o as IFirst;
    first.First;
  end;
  if o is ISecond then begin
    second := o as ISecond;
    second.Second;
  end;
end.
(Für mich) überraschend ist die Ausgabe:

Code: Alles auswählen

first
first
Ändert man die Interfacedeklaration ab und gibt jedem Interface einen Identifier (das kann -- muss aber nicht -- eine GUID sein)

Code: Alles auswählen

type
  IFirst = interface['first']
    procedure First;
  end;

  ISecond = interface['second']
    procedure Second;
  end;
funktioniert die Ausgabe wie erwartet:

Code: Alles auswählen

first
second
Nun frage ich mich aber wieso das so ist.

In der Freepascal-Doku steht dazu:
https://www.freepascal.org/docs-html/current/ref/refse45.html hat geschrieben:Normally, the GUIDs are only used in Windows, when using COM interfaces.
Habe ich da irgendetwas missverstanden?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10920
Registriert: Mo 11. Sep 2006, 19:01

Re: CORBA-Interfaces mit und ohne Identifier

Beitrag von theo »

Wo siehst du den Widerspruch?
Bei Corba muss es kein TGUID sein, aber ein einfacher String schon.

Code: Alles auswählen

Corba interfaces are identified by a simple string so they are assignment compatible with strings and not with TGUID. 
The compiler does not do any automatic reference counting for the CORBA interfaces, so the programmer is responsible for any reference bookkeeping. 
https://www.freepascal.org/docs-html/cu ... -1270007.7

P.S. Bin absolut kein Experte dafür.

Benutzeravatar
kupferstecher
Beiträge: 436
Registriert: Do 17. Nov 2016, 11:52

Re: CORBA-Interfaces mit und ohne Identifier

Beitrag von kupferstecher »

Mir kommt das auch seltsam vor und ich würde das als Bug ansehen. Second hat ja überhaupt nichts mit First zu tun. Und wenn der Compiler das aufgrund eines fehlenden Identifiers wirklich nicht unterscheiden könnte, müsste m.E. eine Fehlermeldung ausgegeben werden.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: CORBA-Interfaces mit und ohne Identifier

Beitrag von corpsman »

Was richtig strange ist, der Prüft auch die Parameter nicht.
Wenn first nun parameter erwaretet und Second nicht wirds richtig grußelig..
--
Just try it

Antworten