调用CoUninitialize后释放IWICImagingFactory报错相关问题咨询
问题1:调用CoUninitialize()函数时,WICfactory会被自动释放吗?
不会。COM接口的引用计数由调用方手动管理,CoUninitialize()仅负责关闭当前线程的COM库、卸载线程加载的COM相关DLL,不会主动为你持有的任何COM接口调用Release()方法执行释放。
你遇到的访问违规是因为CoUninitialize()执行后,WIC组件对应的DLL已经被卸载,mpWICFactory指向的内存空间已经被系统回收,此时再调用Release()访问无效内存地址就会触发报错。
问题2:我是否必须在调用CoUninitialize()函数之前释放WICFactory?
是,你必须在CoUninitialize()调用前释放所有你持有的COM接口指针,包括IWICImagingFactory、ID2D1Factory以及所有你创建的Direct2D、WIC相关资源接口。
正确的程序退出资源释放顺序为:
- 释放所有自定义持有COM接口指针(包括渲染目标、位图、WIC工厂、D2D工厂等)
- 调用
CoUninitialize()关闭COM库
内容的提问来源于stack exchange,提问作者user10535330
相关产品推荐
相关产品推荐

