自己写的进程外Com Server,如何实现通过GetActiveObject获得接口

fly4free 2014-11-14 09:22:18
自己通过VS2008向导建立的ATL工程,加入了ATL简单对象。
客户程序只能成功调用 CreateInstance,而 GetActiveObject 返回 0x800401e3,就是找不到(comserver 进程已存在)

请问如何实现类似 word, excel 那样的 可以通过调用 GetActiveObject 来获得已经存在的实例的接口?
...全文
578 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbs_biscuit 2014-12-06
  • 打赏
  • 举报
回复
你要解决什么问题呢 ? 如果是要解决单一实例的问题 网上 搜索下 DECLARE_CLASSFACTORY_SINGLETON 的用法 。这样 你就不用 get 判断了,直接创建就可以了
fly4free 2014-11-25
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
如果你的实例需要加入 ROT,那么在其创建或自己构造的时候,使用 RegisterActiveObject 把自己加入 ROT 就可以了。 关闭的时候 CoLockObjectExternal 。
感谢,研究好久,终于把代码放在正确的位置了,不过有个问题,我的软件中用一个服务来创建这个对象。 然后用另一个用户进程getactiveobject,不过调用失败。系统是win7。我知道应该是服务进程的事儿。可是怎么才能让它全局可见,或者指定可见范围呢?貌似也没有安全属性可设置……
ole_master 2014-11-18
  • 打赏
  • 举报
回复
引用 7 楼 Saleayas 的回复:
如果你的实例需要加入 ROT,那么在其创建或自己构造的时候,使用 RegisterActiveObject 把自己加入 ROT 就可以了。 关闭的时候 CoLockObjectExternal 。
用IRunningObjectTable::Register的话,为什么class moniker不行,只能用item moniker啊
Saleayas 2014-11-17
  • 打赏
  • 举报
回复
如果你的实例需要加入 ROT,那么在其创建或自己构造的时候,使用 RegisterActiveObject 把自己加入 ROT 就可以了。 关闭的时候 CoLockObjectExternal 。
fly4free 2014-11-16
  • 打赏
  • 举报
回复
引用 5 楼 redui 的回复:
客户端想要获取,组件启动后就必须先注册,有人肯给你才能获得啊
组件,客户端,都是我自己写的。不过目前我只能用 CreateInstance 来创建不同的实例。 通过 RegisterActiveObject 可以实现复用已有的实例,但我不知道在什么地方加入何样的代码……
redui 2014-11-16
  • 打赏
  • 举报
回复
客户端想要获取,组件启动后就必须先注册,有人肯给你才能获得啊
fly4free 2014-11-15
  • 打赏
  • 举报
回复
哎,谷歌用不了了,codeproject不知道怎么回事访问也极慢
Saleayas 2014-11-14
  • 打赏
  • 举报
回复
你注册了吗? RegisterActiveObject
fly4free 2014-11-14
  • 打赏
  • 举报
回复
引用 1 楼 Saleayas 的回复:
你注册了吗? RegisterActiveObject
感谢关注,不过不知道怎么用啊。 我想要的效果是:如果存在一个实例,那么可以通过 GetActiveObject 得到,否则就 CreateInstance

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧