gpt4 book ai didi

c++ - 为什么 IUnknown 类中的方法声明为 __stdcall

转载 作者:行者123 更新时间:2023-11-30 02:45:09 24 4
gpt4 key购买 nike

我是 COM 新手。为什么接口(interface)方法 QueryInterface AddRefRelease 被声明为具有 __stdcall 而不是任何其他调用(__cdlecl、__thiscall 等)。

这是为了支持调用其他语言吗?

我觉得这个问题对于懂COM的人来说还是比较简单的。

最佳答案

COM 是一个二进制 接口(interface)标准,允许用一种语言编写的代码调用用另一种语言编写的函数。必须有一些最低限度的保证,这样的调用才能有好的结果,语言在实现自己的函数调用的方式上有不同的标准。

调用约定太多。对于 32 位代码中常见的那些,有 __stdcall、__cdecl、__thiscall、__fastcall、__clrcall。所有这些都与空间、时间、灵 active 和安全性之间的不同权衡有关。语言实现者倾向于提出他们自己的,通常是 __fastcall 的一些变体。

那行不通,COM 设计人员不得不在墙上钉一个钉子,让代码有机会进行互操作。他们选择了一个明显的选择,怀疑他们花了很多时间权衡选项,他们使用了也用于进行操作系统调用的调用约定。在 Windows 上运行语言运行库意味着它需要知道如何进行操作系统调用。所以他们选择了 __stdcall。

关于c++ - 为什么 IUnknown 类中的方法声明为 __stdcall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738189/

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