请问怎么判断对象是否是某种类型(50分)

  • 主题发起人 budianermayi
  • 开始时间
B

budianermayi

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure NodeRecursion(XMLNode:IXMLNode;TreeNode:TTreeNode);
var
SubXMLNode:IXMLNode;SubTreeNode:TTreeNode;
begin
if (XMLNode is IXMLNodeCollection ) then
begin
TreeView1. TreeNode
end
else
begin
end
end;

我想判断XMLNode是否是IXMLNodeCollection 类型地接口,请问怎么实现??????????
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender is TButton then
Showmessage('Yes')
else
ShowMEssage('No');
end;
 
也可这样:

success:boolean;
v1:TType1;
v2:TType2;

try
v1:=(v2 as TType1);
success:=true;
except
success:=false;
end;
 
判断接口啊? 用 QueryInterface 啊:

if Succeed(XMLNode.QueryInterface(IXMLNodeCollection, ptr)) then
XMLNode 支持 IXMLNodeCollection 接口

 
谢谢beta,
不过我还是不太会用这个函数
ptr是什么?
函数定义
function QueryInterface(const IID: TGUID
out Obj): HResult
stdcall;
中的 out Obj 我不懂,你能给我介绍一下吗?谢谢
 
还是用Supports好了:
function Supports(const Instance: IInterface
const IID: TGUID
out Intf): Boolean
overload;
function Supports(const Instance: TObject
const IID: TGUID
out Intf): Boolean
overload;
function Supports(const AClass: TClass
const IID: TGUID): Boolean
overload;

第二个参数IID,你直接传递接口类型IXMLNodeCollection就可以了,Delphi会帮你把它转化为TGUID的,第三个参数是IXMLNodeCollection的一个实例。
 
XMLNode.QueryInterface(IXMLNodeCollection, ptr)

如果 XMLNode 支持 IXMLNodeCollection 接口的话,则将指向该接口的指针
存到 ptr 中。就是说如果调用成功的话,ptr 就是你要用的接口了。
 
接受答案了.
 
顶部