c++ - 为什么当 HBITMAP 被销毁时,来自 OleCreatePictureIndirect 的 IImage 变得无效?
问题描述
我想用来OleCreatePictureIndirect
创建一个IImage
对象。我用一个HBITMAP
to 作为来源。只要现有HBITMAP
的没有被破坏,这就是完美的。
为什么仍然依赖于我用来创建IImage
from 的旧 HBITMAP?文档对此只字未提。
阅读有关的文档fOwn
,我了解,调用者仍负责销毁对象。但是没有注意,只要我想使用IImage
.
当我使用时,OleLoadPicture
我不需要关心任何事情。
// If this object gets out of scope the IImage ist no longer valid.
CBitmap bitmap;
bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_ANYBITMAP));
CComPtr<IPicture> spIPicture;
PICTDESC pictdesc{ sizeof(PICTDESC) };
pictdesc.picType = PICTYPE_BITMAP;
pictdesc.bmp.hbitmap = bitmap;
HRESULT hr = ::OleCreatePictureIndirect(&pictdesc, IID_IPicture, FALSE, (void**)&spIPicture);
UNUSED_ALWAYS(hr);
ASSERT(SUCCEEDED(hr));
解决方案
推荐阅读
- mysql - MySQL依靠前提条件?
- python - Windows 10、Python 3.6 和 64 位上的 TensorFlow 加载 DLL 失败
- android - 我可以通过始终在后台运行的服务跟踪 gps 纬度和经度吗?
- php - 加密的 zip 文件,在 php 7.2 之前
- javascript - 使用 SimpleHTMLDom 从 javascript var 解析
- c++ - 如何在我的 Visual C++ 项目中使用 .a 文件
- excel - 阅读特定文本,并从另一张纸上复制文本
- php - 在mysql数据库中保存路径和计数图像
- apache-spark - 如何解决“无法创建多个 Sparkcontext 错误”?
- python - 如何在 SQLAlchemy 中检查会话状态