CoCreateInstance 函数是 Windows API 中的一部分,用于创建 COM 对象的实例。这个函数通常用于实例化某个具体的 COM 类,通过该类的 CLSID(Class Identifier)标识。

以下是该函数的原型:
HRESULT CoCreateInstance(
  REFCLSID  rclsid,
  LPUNKNOWN pUnkOuter,
  DWORD     dwClsContext,
  REFIID    riid,
  LPVOID    *ppv
);

参数解释:

  •  rclsid:要创建的 COM 类的 CLSID。

  •  pUnkOuter:用于控制聚合的外部对象的 IUnknown 接口指针。如果不进行聚合,可以传递 nullptr。

  •  dwClsContext:指定对象在其中运行的上下文。通常使用 CLSCTX_INPROC_SERVER 或 CLSCTX_LOCAL_SERVER。

  •  riid:要请求的接口的 IID(Interface Identifier)。

  •  ppv:用于存储请求的接口指针的指针。


函数返回 HRESULT 类型的值。如果操作成功,返回 S_OK,否则返回相应的错误代码。

示例用法:
#include <Windows.h>
#include <Combaseapi.h>
#include <iostream>

int main() {
    // 创建 COM 对象的实例
    CLSID clsid;
    IID iid = IID_IUnknown;  // 示例请求 IUnknown 接口
    IUnknown *pUnknown = nullptr;

    // 示例:Excel.Application 的 CLSID
    CLSIDFromProgID(L"Excel.Application", &clsid);

    HRESULT hr = CoCreateInstance(clsid, nullptr, CLSCTX_LOCAL_SERVER, iid, (LPVOID*)&pUnknown);

    if (SUCCEEDED(hr)) {
        std::cout << "COM object instance created successfully." << std::endl;

        // 在此使用 pUnknown 进行进一步的操作

        pUnknown->Release();  // 释放对象
    } else {
        std::cerr << "Failed to create COM object instance. Error code: 0x" << std::hex << hr << std::endl;
    }

    return 0;
}

这个示例演示了如何使用 CoCreateInstance 函数创建一个 COM 对象的实例,并获取该对象的 IUnknown 接口。请注意,实际使用时,通常会请求更具体的接口来访问对象的功能。


转载请注明出处:http://www.pingtaimeng.com/article/detail/24564/Win32 API/Combaseapi.h/CoCreateInstance