AGB  ·  Datenschutz  ·  Impressum  







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

Ist in einem Pointer ein TObject

Ein Thema von xaromz · begonnen am 13. Okt 2005 · letzter Beitrag vom 13. Okt 2005
Antwort Antwort
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#1

Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 15:16
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
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 15:30
Evtl mit
Delphi-Quellcode:
if (PtrDings^ is TObject) then
  ShowMessage('OBJEKT!')
else
if (PrtDings^ is IInterface) then
  ShowMessage('IINTERFACE!')
else
  ShowMessage('WAS ANDERES!');
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 15:45
Delphi-Quellcode:
if (PtrDings^ is TObject) then
  ShowMessage('OBJEKT!')
sollte
Delphi-Quellcode:
if (PtrDings is TObject) then
  ShowMessage('OBJEKT!')
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 16:09
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#5

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 16:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 16:14
Ja, stimmt, sorry
Julian J. Pracht
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 16:15
Wie stehts denn mitif TObject(PtrDings) is TObject then.. oderif TObject(PtrDings) is IInterface then.. ? Habs nicht getestet
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 16:29
Hallo,
Zitat:
if TObject(PtrDings) is IInterface then..
Das hatte ich auch gedacht, aber Delphi sagt "Operator auf diesen Operandentyp nicht anwendbar".

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 16:40
Delphi-Quellcode:
if TObject(PtrDings) is TObject then
 ShowMessage('Object');
Das klappt.

Das mit IInterface klappt leider nicht
Aber wenn wir den Pointer zu TObject casten, dass ergibt eine Prüfung auf TObject natürlich true
Julian J. Pracht
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Ist in einem Pointer ein TObject

  Alt 13. Okt 2005, 20:31
Moin Zusammen,

Zitat von Ultimator:
Delphi-Quellcode:
if TObject(PtrDings) is TObject then
 ShowMessage('Object');
Das klappt.

Das mit IInterface klappt leider nicht
Aber wenn wir den Pointer zu TObject casten, dass ergibt eine Prüfung auf TObject natürlich true
oder, um es etwas deutlicher zu machen:

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:30 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