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

时间:2014-07-14 13:55:09

标签: c++ com

我是COM的新手。为什么接口方法QueryInterface AddRefRelease被声明为__stdcall而不是任何其他调用(__ cdlecl,__ thiscall等)。

这是否支持调用其他语言?

我认为这个问题对那些知道COM的人来说非常简单。

1 个答案:

答案 0 :(得分:3)

COM是二进制接口标准,允许用一种语言编写的代码调用用另一种语言编写的函数。必须有一些最低限度的保证,这些调用可以达到良好的目的,语言对它们实现自己的函数调用的方式有不同的标准。

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

那是不行的,COM设计师不得不把一个钉在墙上,以便为代码提供互操作。他们选择了一个明显的选择,怀疑他们花了很多时间权衡选项,他们使用了调用约定,它也用于进行操作系统调用。在Windows上运行语言运行时隐含的是它需要知道如何进行OS调用。所以他们选择了__stdcall。