这个问题CSDN上有人能解决吗--太难了,UP有分

                            
不知道大家看过《DELPHI   COM深入编程这本书没有》,看过的可还记得第四章中COM事件的讲述?书中讲述了如何用COM的事件技术来制作一个简单的聊天服务器--开始是只能响应一个客户的例子,然后扩展到能够同时连接多个客户端!其中有这么一段代码:   
  procedure   TEventInt.SendText(const   Text:   WideString);  
  var   Enum:IEnumConnections;  
          ConnectData:TConnectData;  
          FetchED:cardinal;  
  begin  
      Enum:=   GetEnumerator;  
      if   Enum<>nil   then    
      begin  
          while   Enum.Next(1,ConnectData,@fETCHED)=S_OK     do  
          if   ConnectData.pUnk<>nil   then  
              (ConnectData.pUnk   as   IeventIntEvents).OnText(Text);  
      end;  
  end;  
   
  这个过程的作用是把某一客户端发来的文本传送到所有的客户端!  
   
  问题是这样的:  
  配置DCOM时,本地没问题!  
  远程如果是配置固定的某一组用户或单个用户也没问题!  
  现在我希望扩展任何客户端都能够使用这个聊天服务,而不必为每一个客户端分配权限,根据WINDOWS   NT的权限机制,为DCOM服务的权限配置为everyone用户!  
   
  问题就出在这里:当权限设置为everyone时,事件就不起作用了!我跟踪调试到Enum.Next(1,ConnectData,@fETCHED)=S_OK前面都是OK的时,可是到Enum.Next(1,ConnectData,@fETCHED)=S_OK这里,循环就没有往下进行了-也就是说没有发现任何客户端!  
   
  注意:设置为其他用户,则正常运行!  
  所以问题就集中在这个Enum.Next(1,ConnectData,@fETCHED)=S_OK上,  
  到底是什么问题呢?大家看看!  
  或者详细讲一下Enum.Next(1,ConnectData,@fETCHED)这个方法的用法也成!  
 

查看回复