我正在使用 GDI+ 函数
Bitmap::FromStream()
加载 PNG 资源,遵循 本文中提供的示例。
Bitmap::FromStream()
函数需要 IStream
作为其第一个参数。由于IStream
是一个COM接口,而我对COM编程的了解有限,我想澄清一下:
在创建或使用为此函数实现
CoInitialize
的对象之前,我是否需要显式初始化 COM(例如,使用 IStream
)?
示例代码似乎在没有显式初始化 COM 的情况下工作正常,但我不确定这是否是正确或可靠的方法。在某些情况下这会导致问题吗?
任何关于在这种情况下 COM 初始化是否必要的见解将不胜感激。
编辑:
这个问题不是重复的。
在另一个问题中,应用程序在没有调用
CoInitialize()
的情况下直接失败,重点是理解为什么需要它。
但是,就我而言,应用程序无需显式初始化 COM 即可运行,我担心这是否安全,或者在某些情况下是否可能导致问题。我的问题旨在澄清使用 COM 接口时是否需要显式 COM 初始化以及跳过初始化的潜在影响。
如果您定义自己的类来实现 COM 接口以便在自己的代码中使用,则无需初始化 COM。
如果您需要通过系统工厂创建 COM 对象,或者在 exe 之外传递对象,则确实需要初始化 COM。
例如,如果您使用
CreateStreamOnHGlobal()
或 SHCreateMemStream()
在自己的类中创建 IStream object then you should initialize COM first. If you implement the
IStream`,则不需要。