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

Win32 MFC中如何从嵌入资源生成IStream格式图标流?

将嵌入资源中的ICO转换为wil::com_ptr的实现步骤

1. 把ICO文件嵌入为可执行资源

打开项目的资源脚本(.rc文件),添加ICO资源的定义:

// 先在resource.h中定义资源ID,示例:
// #define IDI_SETTINGS_ICO 101
IDI_SETTINGS_ICO ICON "res\\settings.ico"

将"res\\settings.ico"替换为你的ICO文件在项目中的实际路径,确保文件已放置到对应目录。

2. 从资源加载并生成IStream对象

用以下代码替换原本地文件加载逻辑:

wil::com_ptr<IStream> iconStreamPdfSettings;

// 定位资源
HRSRC hResHandle = FindResource(nullptr, MAKEINTRESOURCE(IDI_SETTINGS_ICO), RT_ICON);
if (!hResHandle)
{
    // 此处添加资源查找失败的处理逻辑
    return;
}

// 加载资源到全局内存
HGLOBAL hResData = LoadResource(nullptr, hResHandle);
if (!hResData)
{
    // 处理资源加载失败
    return;
}

// 基于资源内存创建IStream
CHECK_FAILURE(CreateStreamOnHGlobal(hResData, FALSE, &iconStreamPdfSettings));

关键细节说明

  • CreateStreamOnHGlobal的第二个参数传FALSE,表示不会自动释放传入的全局内存句柄——资源内存由系统管理,无需手动释放。
  • 沿用原代码的CHECK_FAILURE做COM调用错误检测,保持一致的错误处理风格。
  • 若要处理其他ICO资源,只需替换对应的资源ID即可。

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:44:59