【发布时间】:2021-08-27 12:10:02
【问题描述】:
我正在学习 DirectX 2D。 当我关闭我的应用程序时,我注意到 IWICImagingFactory* 类型变量存在问题。
我在整个程序中只使用了一个 IWICImagingFactory* 变量。所以我在启动程序时启动它一次,在我关闭程序时销毁(释放)一次。
但如果我在调用 CoUninitialize() 函数后释放 IWICImagingFactory* 变量,则会出现错误。
Factorys::~Factorys()
{
SAFE_RELEASE(mpD2DFactory);
SAFE_RELEASE(mpWICFactory);
}
↓ 是韩语,意思是:错误抛出,访问冲突,“this->mpWICFactory->”是 0x6EEFC7D8
我注意到“this->mpWICFactory->”在调用 CoUninitialize() 后尝试释放 WICFactory 时出现问题。所以我在这里读到了 CoUninitialize():“https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-couninitialize”
我在链接中阅读了这部分内容:关闭当前线程上的 COM 库,卸载该线程加载的所有 DLL。
问题一:当我调用 CoUninitialize() 函数时,WICfactory 会自动释放?
问题 2:我必须在调用 CoUninitialize() 函数之前释放 WICFactory 吗?
【问题讨论】:
-
您必须在调用 CoUnitialize docs.microsoft.com/en-us/windows/win32/api/combaseapi/… 之前释放所有 COM 对象
-
谢谢!所以我认为发生错误是因为我调用了 CoUninitialize() 但我没有发布 WIC Factory。
-
是的,请注意您可以/应该使用智能指针(BTW devblogs.microsoft.com/oldnewthing/20200129-00/?p=103380 可能会发生同样的崩溃)
-
再次感谢您!我明白了!
标签: com directx-11 wic