全局变量  node: Pointer;
...
var
  v_node: IXMLNode;  
begin
  v_node := xmldoc.CreateElement('ToolItem', XCFIndex.TargetNamespace); //创建一个节点,返回一个接口
  showmessage(v_node.NodeName);  // 取节点名称  node := IXMLNode(v_node); //把节点赋给node指针
  showmessage(IXMLNode(node).NodeName);  //这里可以正确取出
end;procedure a;
begin
  showmessage(IXMLNode(node).NodeName); //此处就会出现地址错误,是什么原因
end;
上面如果用创建一个对象,不会有问题,请大家帮帮忙

解决方案 »

  1.   

    上面写错了一个node := IXMLNode(v_node); //把节点赋给node指针
    应为 node := Pointer(v_node);  //把接口的地址赋给一个指针变量
      

  2.   

    在过程a中取nodename时,指针变量 node的值v_node的一样,并不为nil,但是内容却都为空
    node^是什么都没有, 即node的值是指向v_node的地址,但内存好象也不存在了,很奇怪
      

  3.   

    虽说Node是全局的Pointer
    但Node指向的东西在出了上面的过程后就已经销毁了(局部变量)在别的过程中当然非法访问了
      

  4.   

    一个光溜溜的指针POINTER类型是不带引用计数的.要不然你使用IXMLNode或IInterface或IUnknown这样的类型来定义Node变量
    要不然你就得手工增加引用计数.
    var
      v_node: IXMLNode;  
    begin
      v_node := xmldoc.CreateElement('ToolItem', XCFIndex.TargetNamespace);
      showmessage(v_node.NodeName);  
      node := IXMLNode(v_node);   
      IInterface(node)._AddRef;//加上这句,手工增加引用计数.
      showmessage(IXMLNode(node).NodeName);  
    end;