如何用ATL写单实例共享DLL?

Dev 2000-05-24 06:23:00
例如,当事件发生时,所有客户都收到相同通知,并且能接收相同数据。SOFTDOCTOR向我解释了单实例,但如何共享呢?
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xubin_sh 2000-05-26
  • 打赏
  • 举报
回复
有一本黄颜色的书叫《Visual C++ 5.0 开发ActiveX...忘了》(大概叫这个名字)
很详细的写了用MFC,ATL,BaseCtrl开发ActiveX...
不过看了MSDN后觉得royluo所得也正确。
softdoctor 2000-05-26
  • 打赏
  • 举报
回复
既然是单实例了,事件通知应该也是共享的,因为所有事件均是由此实例发出的。
Dev 2000-05-26
  • 打赏
  • 举报
回复
对,其实我对使用ATL2.0实现单实例和共享服务器是知道如何实现的(请参阅《VISUAL C++ 5 ACTIVEX 编程指南》)。在ATL3。0中,使用DECLARE_CLASSFACTORY_SINGLETON宏确实是很快的方法,所以我想问的就是在ATL3。0中是否有类似的宏支持且支持聚合,好像要实现共享不在类工厂,而在服务器内部。
royluo 2000-05-25
  • 打赏
  • 举报
回复
用DECLARE_CLASSFACTORY_SINGLETON的方法也可以实现单实例
比上面的方便。不过要注意的是,如果你是In-Process Server(比如一个DLL)
那么,不同进程的Client仍然会创建不用的Server 实例。
如果你希望不同的进程的Client也共享单一实例的COM Server
那么你的COM Server必须是一个Out-of-Process Server(.EXE)才行
royluo 2000-05-24
  • 打赏
  • 举报
回复
你的COM Client在要创建一个COM Server之前先用GetActiveObject到ROT去取
看看是否已经有一个已经创建的实例,如果取到了,就直接用了
如果取不到你在创建这个COM Server
创建完了,记得使用RegisterActiveObject注册到ROT
最后的释放的时候记得用RevokeActiveObject注销掉
这样,你的多个Client就可以都用连接点通告COM Server
Fire一个事件,就大家都知道了

3,245

社区成员

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

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