You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 14:35:22