AGB  ·  Datenschutz  ·  Impressum  







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

Interfaces + Dlls + Typ Überprüfen

Ein Thema von Billi Berserker · begonnen am 23. Mai 2009 · letzter Beitrag vom 23. Mai 2009
 
Billi Berserker
(Gast)

n/a Beiträge
 
#1

Interfaces + Dlls + Typ Überprüfen

  Alt 23. Mai 2009, 00:20
Ich hab grad ein sehr seltsames Problem wobei die Typ Überprüfung "if (var) is (class) then" nicht funktioniert bzw. immer False zurückgibt.

Situation ist eine Dll und eine Hostanwendung die über Interfaces miteinander kommunizieren (VCL und RTL als runtime packages sind auch im spiel, sollte aber hier kein Problem sein da das Problem mit komplett eigenen, VCL und third party klassen auftritt). Die Dll bekommt von der Host anwendung ein Interface übergeben mit dem sie Daten an die Host Anwendung schicken kann (und mit der die Host Anwendung dann arbeitet). Übergeben werden Klasse als parameter. Problem ist das die Hostanwendung den Typ der Klasse nicht identifizieren kann.

Aber am besten ein Beispiel...
(ungetesteter Beispiel Code der nur das Problem verdeutlichen soll)
Interface
Delphi-Quellcode:
type
  IHostInterface = interface
  [GUID]
    procedure DoSomethingElse(Param : TObject); stdcall;
  end;
In der Dll:
Delphi-Quellcode:
var
  MyClass : TMyClass;

[...]
function DoSomething(HostInterface : IHostInterface);
begin
  HostInterface.DoSomethingElse(MyClass);
end;

Exports
  DoSomething;

begin
  MyClass := TMyClass.Create;
end.
Anwendung die Interface implementiert und in der Problem auftritt
Delphi-Quellcode:
procedure THostInterface.DoSomethingElse(Param : TObject);
begin
  if Param is TMyClass then
    [...] // gibt immer False zurück!

  TMyClass(Param).SomeClassFuntion(); // geht problemlos...
end;
Problem ist das in der Anwendung die Überprüfung "if Param is TMyClass then" nicht funktioniert und immer False zurück gibt. Lustigerweise geht die entsprechende Typumwandlung problemlos.
Das ganze ist mir jetzt schon an mehreren Stellen mit verschiedenen Klassen aufgetreten. (Graphics32, eigene auf TComponent basierende Komponenten, etc.).
Was ich verwirrend finde ist das das Type Casting problem funktioniert und die Klasse danach wie vorgesehen verwendet werden kann, nur die Überprüfung ob der TObject/TComponent parameter denn diese Klasse ist funktioniert nicht (und leider ist das manchmal notwendig).
  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 20:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz