OleInitialize 函数 (ole2.h)

初始化当前单元上的 COM 库,将并发模型标识为单线程单元 (STA) ,并启用以下“备注”部分所述的其他功能。 应用程序必须先初始化 COM 库,然后才能调用 CoGetMalloc 和内存分配函数以外的 COM 库函数。

语法

HRESULT OleInitialize(
  [in] LPVOID pvReserved
);

参数

[in] pvReserved

此参数是保留的,必须为 NULL

返回值

此函数在成功时返回S_OK。 其他可能的值包括以下内容。

返回代码 说明
S_FALSE
COM 库已在此单元上初始化。
OLE_E_WRONGCOMPOBJ
计算机上的 COMPOBJ.DLL 和 OLE2.DLL 版本相互不兼容。
RPC_E_CHANGED_MODE
先前对 CoInitializeEx 的调用将此单元的并发模型指定为多线程单元 (MTA) 。 这也意味着发生了从中性线程单元到单线程单元的更改。

注解

使用以下功能的应用程序必须先调用 OleInitialize ,然后才能调用 COM 库中的任何其他函数:

  • 剪贴板
  • 拖放
  • 对象链接和嵌入 (OLE)
  • 就地激活
OleInitialize 在内部调用 CoInitializeEx 以初始化当前单元上的 COM 库。 由于 OLE 操作不是线程安全的, 因此 OleInitialize 将并发模型指定为单线程单元。

设置单元的并发模型后,无法更改该模型。 在以前初始化为多线程的单元上调用 OleInitialize 将失败并返回RPC_E_CHANGED_MODE。

在调用 除 CoGetMalloc 之外的任何库函数之前,需要在单元上初始化 COM 库,以获取指向标准分配器和内存分配函数的指针。

通常,COM 库仅在单元上初始化一次。 后续调用将成功,只要它们不尝试更改单元的并发模型,但会返回S_FALSE。 若要正常关闭 COM 库,每次成功调用 OleInitialize(包括返回S_FALSE的调用)都必须通过对 OleUninitialize 的相应调用来平衡。

由于无法控制加载或卸载进程内服务器的顺序,因此请不要从 DllMain 函数调用 OleInitializeOleUninitialize

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 ole2.h
Library Ole32.lib
DLL Ole32.dll
API 集 在 Windows 8) 中引入的 ext-ms-win-com-ole32-l1-1-0 (

另请参阅

CoInitializeEx

OleInitialize

OleUninitialize