不知道大家看过《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)这个方法的用法也成!
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)这个方法的用法也成!
解决方案 »
- 安装devexpress后编译时出现File not found: 'dxSkinsCore.dcu'
- ******????求救,delphi调用存储过程出错??在线等待中¥¥¥¥¥¥
- 刚在ACCESS数据库中插入一条纪录,如何取回自动编号字段的值?
- 调用ClientDataSet1.ApplyUpdates(-1); 后数据离奇消失
- 有没有什么办法使panel的hint在鼠标进入的时候强行快速出现?
- SQL语句的写法
- sql语句的问题
- 怎么把磁盘添加到treeview控件里面,加上磁盘图标?
- 如何列出计算机中所有的串口.如装有moxa的串口服务器.请指教.谢谢
- RXLIB 2.75 FOR XE10.2 怎么安装?请大神相助
- 有哪位高人跟小妹介紹一下delphi當中的鎖!!!!!
- 免费培训JAVA,1对1教学,北京的学生请看看
DCOM在安全机制上受WINDOWS的域用户管理机制的完全控制,有些限制是没办法解决的。^_^