如何使用WIC API初始化IWICBitmapDecoder?
解决WIC CreateDecoderFromStream的未初始化指针问题
你的问题出在ppIDecoder这个二级指针的初始化上:你只是声明了IWICBitmapDecoder** ppIDecoder;,但没有让它指向一个有效的IWICBitmapDecoder*类型变量的内存地址,导致调用CreateDecoderFromStream时访问了未定义的内存空间,触发运行时异常。
修复方案
你代码里已经定义了IWICBitmapDecoder* pDecoder = NULL;这个一级指针(且已初始化为NULL,符合COM对象初始化规范),直接把它的地址传递给CreateDecoderFromStream即可,完全不需要单独声明ppIDecoder变量。
修改后的关键代码段:
// 移除原来的IWICBitmapDecoder** ppIDecoder;声明 // ... 其他代码保持不变 ... if (SUCCEEDED(hr)) { // Create a decoder for the stream. hr = pIWICFactory->CreateDecoderFromStream(pStream, 0, WICDecodeMetadataCacheOnLoad, &pDecoder); }
额外说明
如果坚持要使用ppIDecoder变量,也可以这样初始化:
IWICBitmapDecoder* pDecoder = NULL; IWICBitmapDecoder** ppIDecoder = &pDecoder; // 让二级指针指向已初始化的一级指针地址 // ... hr = pIWICFactory->CreateDecoderFromStream(pStream, 0, WICDecodeMetadataCacheOnLoad, ppIDecoder);
这样就能确保CreateDecoderFromStream有一个有效的内存地址来存储创建好的解码器对象指针。
内容的提问来源于stack exchange,提问作者Gunnar Vestergaard
相关产品推荐
相关产品推荐

