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

freekany2002 2003-01-20 06:05:31
不知道大家看过《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)这个方法的用法也成!
...全文
浏览 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
猛禽 2003-01-22
那个程序只能做为DEMO,不实用的。
DCOM在安全机制上受WINDOWS的域用户管理机制的完全控制,有些限制是没办法解决的。^_^
回复
ZhuJunfeng 2003-01-22
还是不用com的好
回复
freekany2002 2003-01-21
up
回复
steel1991 2003-01-21
严重关注!
回复
xbxsoft 2003-01-21
up
回复
laisxy 2003-01-20
DCOM配置非常之Shit, 我试过在公司里配置好服务器,无论是98的客户端还是nt、2000的客户都是好的。谁知道当我到了客户现场后,就怎也不通了。

公司里已经规定除本机外不使用DCOM了。

不过如果你想调程序,你可以把两台机器的用户名和密码都设一样就OK了.
回复
yczyk 2003-01-20
我也来研究一下,不过,COM的书我只看一点点呢!
回复
VCBoyGirl 2003-01-20
可以改用SOCK连接呀,一样的,只是改一个控件而已,这样你就不会为这事烦了
回复
qxj 2003-01-20
正在学习中.
回复
huangrenguang 2003-01-20
正有意研究,gz
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1565

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告