gpt4 book ai didi

c++ - C 和 C++ 中的 CoCreateInstance 函数签名

转载 作者:太空狗 更新时间:2023-10-29 23:17:25 25 4
gpt4 key购买 nike

我编写 COM 函数已有多年,今天我注意到许多函数实际上在 C 和 C++ 中具有不同的签名。例如 CoCreateInstance 函数:

HRESULT CoCreateInstance(
_In_ REFCLSID rclsid,
_In_ LPUNKNOWN pUnkOuter,
_In_ DWORD dwClsContext,
_In_ REFIID riid,
_Out_ LPVOID *ppv
);

在 C++ 中,签名扩展为

unsigned __int32 CoCreateInstance(const CLSID& clsid, IUnknown*
pUnkOuter, unsigned __int32 dwClsContext, const IID& iid, void* ppv);

而在 C 中,签名变为

unsigned __int32 CoCreateInstance(const CLSID* clsid, IUnknown*
pUnkOuter, unsigned __int32 dwClsContext, const IID* iid, void* ppv);

在Ole32.dll中只有一个CoCreateInstance入口,这意味着两个声明指向同一个实现。

此 Microsoft 扩展是否受 C++ 标准支持?

最佳答案

首先要明白,虽然非常相似,但 C 与 C++ 是不同的语言。现在进入 CoCreateinstance() 函数。我看到的唯一区别是签名在 C++ 中使用 xxx& 或通过引用传递,而在 C 中使用 xxx*。

理论上,这是正确的。为了能够改变传递的参数的值,C 使用传递内存位置,因此如果调用函数需要,它可以改变参数的值。虽然 C++ 也可以通过传递参数的内存位置来传递参数,但它有一个更好的机制来达到同样的目的。它通过引用传递值。所以对我来说,尽管它们看起来不同,但功能是相同的。

关于c++ - C 和 C++ 中的 CoCreateInstance 函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18210937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com