OleCreateEmbeddingHelper 函数 (ole2.h)
使用应用程序提供的代码(这些代码与 OLE 默认对象处理程序的各个部分聚合)创建 OLE 嵌入帮助程序对象。 可以根据调用方确定的特定上下文和角色创建和使用此帮助程序对象。
语法
HRESULT OleCreateEmbeddingHelper(
[in] REFCLSID clsid,
[in] LPUNKNOWN pUnkOuter,
[in] DWORD flags,
[in] LPCLASSFACTORY pCF,
[in] REFIID riid,
[out] LPVOID *lplpObj
);
参数
[in] clsid
要帮助的类的 CLSID。
[in] pUnkOuter
如果要聚合嵌入帮助程序,则指向外部对象的控制 IUnknown 接口的指针。 如果不进行聚合,则此值应为 NULL,尽管这种情况很少见。
[in] flags
包含为嵌入帮助程序指定角色和创建上下文的标志的 DWORD。 有关合法值,请参阅以下“备注”部分。
[in] pCF
指向函数用于创建辅助对象的类对象上的 IClassFactory 接口的指针。 在某些情况下,此值可能为 NULL。 有关更多信息,请参见下面的“备注”部分。
[in] riid
对调用方所需接口标识符的引用。
[out] lplpObj
接收 riid 中请求的接口指针的指针变量的地址。 成功返回后,*ppvObj 包含新创建的嵌入帮助程序上请求的接口指针。
返回值
此函数在成功时返回S_OK。 其他可能的值包括以下内容。
返回代码 | 说明 |
---|---|
|
操作的内存不足。 |
|
一个或多个参数无效。 |
|
发生意外错误。 |
|
提供的接口标识符无效。 |
注解
OleCreateEmbeddingHelper 函数创建一个对象,该对象支持在默认处理程序中找到的相同接口实现,但该对象具有其他挂钩,允许其比仅作为处理程序对象更常用。 以下两个调用生成相同的结果:
OleCreateEmbeddingHelper(clsid, pUnkOuter, EMBDHLP_INPROC_HANDLER |
EMBDHLP_CREATENOW, NULL, iid, ppvObj)
OleCreateDefaultHandler(clsid, pUnkOuter, iid, ppvObj)
嵌入帮助程序可聚合; pUnkOuter 是嵌入帮助程序要作为其一部分的聚合的控制 IUnknown 。 它用于创建 OLE 默认处理程序的新实例,该实例可用于支持各种角色中的对象。 调用方将指向其 IClassFactory 实现的指针传递给 OleCreateEmbeddingHelper。 然后聚合此对象和默认处理程序以创建新的嵌入帮助程序对象。
OleCreateEmbeddingHelper 函数通常用于支持以下实现之一:
-
同时用作容器和服务器的 EXE 对象应用程序,并支持将对象插入其自身。 在这种情况下, CreateEmbeddingHelper 允许对象支持通常仅在处理程序中支持的接口。 为此,应用程序必须首先为不同的上下文注册其 CLSID,对 CoRegisterClassObject 函数进行两次注册调用,而不是一次,如下所示:
CoRegisterClassObject(clsidMe, pUnkCfLocal, CLSCTX_LOCAL_SERVER, REGCLS_MULTI_SEPARATE...) CoRegisterClassObject(clsidMe, pUnkCfInProc, CLSCTX_INPROC_SERVER, REGCLS_MULTI_SEPARATE...)
在这些调用中,你将将不同的类工厂实现传递给 每个 pUnkCfLocal 和 pUnkCfInProc。 pUnkCfLocal 指向的类工厂将用于创建要嵌入到远程进程中的对象,这是使用与客户端关联的处理程序对象的正常情况。 但是,当服务器同时创建对象并将其嵌入自身时, pUnkCfInProc 指向一个类对象,该对象可以创建支持处理程序接口的对象。 本地类用于创建 对象,进程内类创建嵌入帮助程序,在 pCF 中传入指向第一个对象的类工厂的指针。
- 自定义进程内对象处理程序,在这种情况下,DLL 通过传入指向 pCF 中 IClassFactory 的专用实现的指针来创建嵌入帮助程序。
标志参数的值 | 目的 |
---|---|
EMBDHLP_INPROC_HANDLER | 创建可与 DLL 对象应用程序一起使用的嵌入帮助程序;具体而言,帮助程序公开默认对象处理程序的缓存功能。 |
EMBDHLP_INPROC_SERVER | 创建要用作进程内服务器的一部分的嵌入帮助程序。 pCF 不能为 NULL。 |
EMBDHLP_CREATENOW | 立即使用 pCF 创建辅助对象;如果 pCF 为 NULL,则使用标准代理管理器。 |
EMBDHLP_DELAYCREATE | 将辅助对象的创建延迟到需要 (帮助程序进入运行状态) 以提高速度和内存使用。 pCF 不得为 NULL。 EMBDHLP_INPROC_HANDLER 标志不能与此标志一起使用。 |
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | ole2.h |
Library | Ole32.lib |
DLL | Ole32.dll |
API 集 | Windows 10版本 10.0.15063 中引入了 ext-ms-win-com-ole32-l1-1-5 () |