gpt4 book ai didi

c++ - 如何为 COM 接口(interface)中的方法生成弃用警告 (c++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:01 25 4
gpt4 key购买 nike

在我工作的地方,我们使用的是“类 COM”模型,因为我们通常遵循 COM 规则,但不执行 MIDL 编译,也不针对 c/c++ 以外的其他语言。因此,我知道我总是可以改变规则以满足我的需要,但我尽量不这样做,因为我们可能希望有一天能够真正兼容 COM,如果那一天到来,我们希望它尽可能轻松。

我想在任何人使用特定接口(interface)的特定方法编译代码时打印警告。在c++中(我们只支持微软编译器),我们会在函数声明前加上__declspec(deprecated)来达到我们的目的。

我可以只将它添加到我的接口(interface)方法声明之前,还是有更好、更 COM 的方法来做到这一点?

我还想知道是否仅在方法前添加 __declspec(deprecated) 就足以迫使用户重新编译(如果可能,我想避免这种情况)。

谢谢

更新

我尝试在我的方法声明前使用 __declspec(deprecated),如下所示:

struct Interface : public IUnknown
{
__declspec(deprecated) virtual HRESULT __stdcall OldMethod
(
int Arg1;
int Arg2;
) = 0;

virtual HRESULT __stdcall NewMethod
(
//arguments...
) = 0;
}

通过这种弃用方法的方式,我在尝试使用 OldMethod 时根本不会收到编译器警告。是否存在我不知道的关于将 __declspec(deprecated) 与纯虚拟方法一起使用的限制?

再次感谢

最佳答案

__declspec(deprecated) 是 MS C/C++ 编译器的源代码级功能,不会影响任何内容的二进制布局 (ABI) - 因此用户无需重新编译。效果是向通过包含 C++ 头文件调用该方法的任何人发出编译时警告。它不会影响将您的对象用作 COM 对象而不包含您的 header 的人,例如来自另一种语言。我认为 COM/IDL 本身不提供类似的“弃用”属性。

总而言之,为了 C++ 用户的利益,您也可以添加该属性,但如果您曾经为一般 COM 使用者提供,他们将不得不依赖您提供的文档来了解该方法已被弃用。

关于c++ - 如何为 COM 接口(interface)中的方法生成弃用警告 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762473/

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