求:建立对操作系统全局唯一 Com 实例的方法

deavilness 2005-03-12 02:00:53
现有需要,在操作系统中建立唯一的一个 Automation Object 实例,冥思苦想、埋头苦干7天毫无进展,总是 CreateObject 了,又无法控制其 Release,已吐血数升。现请求各位大侠帮忙,感谢感谢。
...全文
105 点赞 收藏 13
写回复
13 条回复
caiso 2005年03月14日
顶一下
回复 点赞
alphax 2005年03月13日
>>2,楼主做全局唯一的目的是有东西需共享状态,事实上,并不等于整个COM实例需要共享。。

这个解决思路最好
回复 点赞
halfdream 2005年03月13日
楼主,
其实说了这么多,解决问题在一个关键:绕开RPC,不管具体你用哪种方法。
楼主做COM的时候也可以自定义marshaling,那时候多半也要用上SOCKET。
回复 点赞
halfdream 2005年03月13日
1,WINDOWS对COM支持的平台不直接支持这样做。这同跨进程COM或DCOM底层的机制有些关系,
它们要受进程安全管理。。每个进程都是属于特定用户的,ADMINISTRATOR用户不会访问到
SYSTEM用户启动的COM。。

不过仍然有一些办法。。

2,楼主做全局唯一的目的是有东西需共享状态,事实上,并不等于整个COM实例需要共享。。

3,做成COM的目的之一应该是让客户端容易用简单而统一的方式调用。系统级的服务很多是用
SOCKET,管道等方式提供,使用COM封装实现协议透明化。

4,那种方案不是我创的,微软早就这样做了。

回复 点赞
real_name 2005年03月13日
要用上SOCKET 吧
回复 点赞
S.F. 2005年03月12日
DCOM行不?
回复 点赞
eastliangliang 2005年03月12日
要这样啊。
这个全局唯一的东西一定要做成COM的吗?换个实现方法怎么样,别一棵树上吊死。
回复 点赞
deavilness 2005年03月12日
To real_name(*真名):
我第一次就是这么做的,可是没用,com 只对进程空间有效,到另外一个进程,便会创建一个新的 com 实例。

To halfdream(哈欠):
老兄……真不知道该怎么评价你的方案……既然能做 socket,为什么不干脆搞个 webservice 算了?能不通过网络,就在本机上实现单一实例的目标吗?
回复 点赞
halfdream 2005年03月12日
我给你提一种方案:

你这个需要的东西可以划分为两部分。
1,内核部分,做成WINDOWS SERVICE,以系统用户方式运行,用SOCKET方式提供功能。
2,COM部分,将功能请求用SOCKET转发给内核部分。。

回复 点赞
real_name 2005年03月12日
把你的 Com 嵌套到另外一个 Com 里去,让 客户端连接 第2 个com ,
第2 个com 再创建第1个com
回复 点赞
deavilness 2005年03月12日
To eastliangliang(青苹果):

我也正是这么做,可是 Com 对象的 Release 取决于客户端,而不是我的程序。所以当没有客户端连接的时候,com 就自动 Release 了!注意,是自动 Release!我无法控制啊!
回复 点赞
eastliangliang 2005年03月12日
我怎么觉得一共就一个实例。不是它自己维护一个引用指针,当引用为0时自动销毁的么?
回复 点赞
g961681 2005年03月12日
不会!帮你顶吧!
回复 点赞
发动态
发帖子
Windows SDK/API
创建于2007-08-02

797

社区成员

2.2w+

社区内容

Delphi Windows SDK/API
社区公告
暂无公告