小编use*_*067的帖子

为什么在调用 Windows API 中的 CoCreateInstance 函数时没有类型不匹配?

我正在尝试将这个使用 winapi 调用 WMI/COM 的示例从 C++ 转换为 Rust,但在原始代码中有一些我不明白的地方。这是 C++ 代码中的函数调用:

hres = CoCreateInstance(
        CLSID_WbemLocator,             
        0, 
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator, (LPVOID *) &pLoc);
Run Code Online (Sandbox Code Playgroud)

令我困惑的是第一个和第四个参数的类型。以第四个参数为例。如果我们查看CoCreateInstance 的定义,第四个参数的类型REFIID被定义为 a *IID,其中 anIID 被定义为 a GUID。所以第四个参数应该是一个指向GUID对象的指针。

但是,如果你看一下我的想法是定义IID_IWbemLocator,它被定义为一个GUID(使用DEFINE_GUID宏)。所以看起来我们将 aGUID作为参数传递,而实际上我们应该传递一个指向 a 的指针GUID为什么这段代码会编译?

相比之下,在 Rust 中,我必须传递对IID_IWbemLocator.

抱歉,如果答案真的很简单,我对 C++ 和 Winapi 都不太熟悉。

c++ com winapi

0
推荐指数
1
解决办法
162
查看次数

标签 统计

c++ ×1

com ×1

winapi ×1