在将 IStream 与 GDI+ Bitmap::FromStream() 一起使用之前是否需要初始化 COM?

问题描述 投票:0回答:1

我正在使用 GDI+ 函数

Bitmap::FromStream()
加载 PNG 资源,遵循 本文中提供的示例。

Bitmap::FromStream()
函数需要
IStream
作为其第一个参数。由于
IStream
是一个COM接口,而我对COM编程的了解有限,我想澄清一下:

  • 在创建或使用为此函数实现

    CoInitialize
    的对象之前,我是否需要显式初始化 COM(例如,使用
    IStream
    )?

  • 示例代码似乎在没有显式初始化 COM 的情况下工作正常,但我不确定这是否是正确或可靠的方法。在某些情况下这会导致问题吗?

任何关于在这种情况下 COM 初始化是否必要的见解将不胜感激。


编辑:

这个问题不是重复的。

另一个问题中,应用程序在没有调用

CoInitialize()
的情况下直接失败,重点是理解为什么需要它。

但是,就我而言,应用程序无需显式初始化 COM 即可运行,我担心这是否安全,或者在某些情况下是否可能导致问题。我的问题旨在澄清使用 COM 接口时是否需要显式 COM 初始化以及跳过初始化的潜在影响。

c++ winapi com gdi+
1个回答
0
投票

如果您定义自己的类来实现 COM 接口以便在自己的代码中使用,则无需初始化 COM。

如果您需要通过系统工厂创建 COM 对象,或者在 exe 之外传递对象,则确实需要初始化 COM。

例如,如果您使用

CreateStreamOnHGlobal()
SHCreateMemStream()
在自己的类中创建
IStream object then you should initialize COM first. If you implement the 
IStream`,则不需要。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.