![]() |
Ist in einem Pointer ein TObject
Hallo,
folgendes Problem: Ich hab einen Pointer. Da kann ein TObject drin sein, oder ein IInterface. Wie kann ich herausfinden, was von den beiden ich grade vor mir habe? Gruß xaromz |
Re: Ist in einem Pointer ein TObject
Evtl mit
Delphi-Quellcode:
if (PtrDings^ is TObject) then
ShowMessage('OBJEKT!') else if (PrtDings^ is IInterface) then ShowMessage('IINTERFACE!') else ShowMessage('WAS ANDERES!'); |
Re: Ist in einem Pointer ein TObject
Delphi-Quellcode:
sollte
if (PtrDings^ is TObject) then
ShowMessage('OBJEKT!')
Delphi-Quellcode:
if (PtrDings is TObject) then
ShowMessage('OBJEKT!') |
Re: Ist in einem Pointer ein TObject
So funktioniert das ganze eh nicht, in beiden Fällen würde angezeigt werden, dass es sich um ein Objekt handelt. Der Grund:
Jedes Interface, das einem begegnet, ist von einem Objekt implementiert worden. Und dieses ist wiederum vom Typ TObject. Also wenn schon, dann zuerst nach dem Interface fragen. |
Re: Ist in einem Pointer ein TObject
Das ganze funktioniert prinzipiell nicht, wenn es sich um einen untypisierten Zeiger handelt. Denn auf einen solchen ist der is-Operator natürlich nicht anwendbar.
|
Re: Ist in einem Pointer ein TObject
Ja, stimmt, sorry :oops:
|
Re: Ist in einem Pointer ein TObject
Wie stehts denn mit
Delphi-Quellcode:
oder
if TObject(PtrDings) is TObject then..
Delphi-Quellcode:
? Habs nicht getestet ;)
if TObject(PtrDings) is IInterface then..
|
Re: Ist in einem Pointer ein TObject
Hallo,
Zitat:
Gruß xaromz |
Re: Ist in einem Pointer ein TObject
Delphi-Quellcode:
Das klappt.
if TObject(PtrDings) is TObject then
ShowMessage('Object'); Das mit IInterface klappt leider nicht :? Aber wenn wir den Pointer zu TObject casten, dass ergibt eine Prüfung auf TObject natürlich true ;) |
Re: Ist in einem Pointer ein TObject
Moin Zusammen,
Zitat:
Durch TObject(PtrDings) sagt man dem Compiler, dass man sich sicher ist, dass PtrDings vom Typ TObject ist, bzw. dass der Compiler hier nicht den Typ prüfen muss. Ob diese Art Typecast dann auch stimmt liegt in der Verantwortung dessen der es schreibt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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