static型的COM变量,程序退出时异常

mikeche6361 2012-08-22 09:08:24
请问:
1 程序中所有创建的COM组件变量(CoCreateInstance创建)都必须在CoUninitialize之前进行?
2 程序中static型变量分配的内存,则在Winmain返回后由编译器释放的?
3 如果以上两条成立的话,那么就不能避免的在CoUninitialize之后,释放COM变量会发生异常,该问题应该如何解决?

请高手帮忙回答一下,谢谢
...全文
146 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mikeche6361 2012-08-22
  • 打赏
  • 举报
回复
5楼方法果然可以,万分感谢
mikeche6361 2012-08-22
  • 打赏
  • 举报
回复
5楼的办法可能可行,我去试试 谢谢
Occam's_Razor 2012-08-22
  • 打赏
  • 举报
回复
可以这样试试

定义一个辅助类


class CComEnvironment
{
public:
CComEnvironment()
{
CoInitialize(NULL);
}
~CComEnvironment()
{
CoUninitialize();
}
};

在你的静态变量定义前

先定义
static CComEnvironment COM_ENV;
ndy_w 2012-08-22
  • 打赏
  • 举报
回复
智能指针害人!如果对象的生命周期就是程序的生命周期,那你可以在CoUninitialize前面一行自己调用spXXX->Release();
sg_knight 2012-08-22
  • 打赏
  • 举报
回复
调用CoUninitialize之前,手工Release指针。
mikeche6361 2012-08-22
  • 打赏
  • 举报
回复
请问有没有方法,可以让static的com变量,在程序退出时不发生异常?我的程序是:该static变量使用的是智能指针,程序退出时,在Winmain后编译器才会自动调用该智能指针的Release,因此会发生异常,也就是说把CoUninitialize放在Winmain最后一行也没用,请问该如何解决这个static释放时机的问题?
ndy_w 2012-08-22
  • 打赏
  • 举报
回复
CoUninitialize退出套间,会把dll都卸载了。留下的接口指针不再有效,你再release就会出问题。
但是你说的static只是接口指针占用的内存,释放这个内存和com无关。要释放com对象,你要自己调用release。
确认对象的生存周期,在合适的时候调用release,并把接口指针清0。

3,245

社区成员

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

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