Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 06:32

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FPC Interfaces Delegates
BeitragVerfasst: So Jun 27, 2010 09:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Code:
type TClass1 = class(TInterfacedObject);

       ITest = interface(IInterface)
         procedure Test;stdcall;
       End;

       TClass2 = class(TClass1, ITest)
         procedure Test;stdcall;
       End;
...
var Class1 : TClass1;
...
Class1 := TClass2.Create;


Nun möchte ich herausfinden ob was auch immer sich unter Class1 verbirgt ITest implementiert.
getInterface, Supports haben mir nicht wirklich geholfen(bekomme immer false zurück) und direkt Class1 auf ITest zu casten geht auch nicht habs einfach testweise mal ausprobiert.

Somit wie kann ich Class1 auf ITest casten falls ITest auch implementiert ist???


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FPC Interfaces Delegates
BeitragVerfasst: So Jun 27, 2010 10:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
GetInterface und Supports sind genau das richtige. Auch ein Cast mit dem As-Operator (wirft aber einer Exception, wenns nicht geht) oder eine Überprüfung mit dem is-Operator sollten den Dienst tun.

Sagst du FPC denn auch, dass du ITest implementierst?
Code:
type ITest = interface
    procedure Test; stdcall;
  end;

  TClass2 = class (TInterfacedObject, ITest)
    procedure Test; stdcall;
  end;


greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FPC Interfaces Delegates
BeitragVerfasst: So Jun 27, 2010 12:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Wenn ich getInterface, Supports benutze bekomme ich eben immer false und bei einem cast von Class1 auf das Interface gibts nen Syntax error, von wegen das class1 das Interface nicht implementiert was ja auch stimme den erst der nachkomme tut das.
Ich hoffe jetzt ist klar wo das Problem liegt...
Kann es sein das ich den Mode änder muss damit fpc das reibungslos verarbeitet was ich will??


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FPC Interfaces Delegates
BeitragVerfasst: So Jun 27, 2010 12:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ah… Kann es sein, dass deine Interfaces keine GUID haben? Eine GUID ist meines Wissens erforderlich, um GetInterface und Supports nutzen zu können:
Code:
type
  ITest = interface (IUnknown) ['{839980A6-CEF2-4FF4-B56B-8EA1C3C15CB8}']
   // Blubb
  end;

Lazarus kann gültige GUIDs in den Code generieren mit Strg+Shift+G. Ansonsten einfach mal google benutzen.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FPC Interfaces Delegates
BeitragVerfasst: So Jun 27, 2010 12:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Darauf bin ich auch schon gestoßen hat aber leider auch nicht den gewünschten effekt...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FPC Interfaces Delegates
BeitragVerfasst: So Jun 27, 2010 13:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Dann hilft nur noch mehr Code, fürchte ich.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FPC Interfaces Delegates
BeitragVerfasst: So Jun 27, 2010 13:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
So hier ein wenig mehr code, hoffe das Problem lässt sich damit lösen.

Class1
Code:
TPlugin = class(TMyInterfacedObject)
  private
    FName        : String;
    FAuthor      : String;
    FFinalizeLib : TFinalizeLib;
    FLibrary     : TLibHandle;
  public
    constructor Create(const ALibHandle : TLibHandle; AFinalizeLib : TFinalizeLib; const AName : String; const AAuthor : String);

    property FinalizeLib : TFinalizeLib read FFinalizeLib;
  published
    property Name      : String     read FName;
    property Author    : String     read FAuthor;
    property LibHandle : TLibHandle read FLibrary;
  end;


Interface
Code:
const SBVPlugin = '{8908E562-66CA-4A8D-906F-C7FCD07B7B10}';
IBVPlugin = Interface(IInterface)[SBVPlugin]
       function FindBV(ASNode : TSceneNode) : TBoundingVolume;
     End;


Class2
Code:
TDefPlugin = class(TPlugin, IBVPlugin)
     public
       function FindBV(ASNode : TSceneNode) : TBoundingVolume;
     End;   


Code:
var P : TPlugin;
...
P := TDefPlugin.Create;
BoundingV.Checked := Sysutils.Supports(P, StringToGUID(SBVPlugin));   // liefert false
...


mfg Frenk


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]