COM里只执行一次的函数

David_Hu 2012-12-26 02:15:54
我新建的一个COM
会导出接口操作驱动方面的一些东东
HRESULT FinalConstruct()

打开驱动

void FinalRelease()

关闭驱动

然后我新增了一个函数,我想让COM这个类只实例化一次,可以吗?
因为我不想让驱动无限次打开关闭
CDriverControl * CDriverControl ::GetInstance( void )
{
static CDriverControl sDriverManage;

return &sDriverManage;
}

当然看官们也可以给点其它的意见,COM里能否让有些函数只执行一次?或是有什么更好的方法?
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 hudaweikevin 的回复:
引用 3 楼 akirya 的回复:可以用 DECLARE_CLASSFACTORY_SINGLETON 让COM类只实例化一次 谢谢,可以了 再补一个问题: 这个对不同进程的调用应该是不受限制吧
当前进程一次。 要是所有进程的话,得改为进程外组件。
jiejieaiai 2012-12-26
  • 打赏
  • 举报
回复
你可以用一下互斥呀,这个是可以多进程的
David_Hu 2012-12-26
  • 打赏
  • 举报
回复
引用 3 楼 akirya 的回复:
可以用 DECLARE_CLASSFACTORY_SINGLETON 让COM类只实例化一次
谢谢,可以了 再补一个问题: 这个对不同进程的调用应该是不受限制吧
  • 打赏
  • 举报
回复
可以用 DECLARE_CLASSFACTORY_SINGLETON 让COM类只实例化一次
David_Hu 2012-12-26
  • 打赏
  • 举报
回复
引用 1 楼 pig357 的回复:
加个BOOL变量,判断 if(isInit) { return NULL; } else { ... }
同一进程中会多次CoCreateInstance的,BOOL变量不管用吧 只有一次CoCreateInstance那就什么都不用了
pig357 2012-12-26
  • 打赏
  • 举报
回复
加个BOOL变量,判断 if(isInit) { return NULL; } else { ... }

3,245

社区成员

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

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