以下是该函数的原型:
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.zyzy.cn/article/detail/24564/Win32 API/Combaseapi.h/CoCreateInstance