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

fra*_*mon 5 c++ com visual-studio-2010 deprecated

我正在使用"COM-like"模型,因为我们通常遵循COM规则,但不执行MIDL编译,也不使用c/c ++之外的其他语言.因此,我知道我总是可以根据自己的需要改变规则,但我尽量不这样做,因为我们可能希望有一天真正符合COM标准,如果那一天到来,我们希望它尽可能地无痛.

当任何人使用特定接口中的某种方法编译代码时,我想打印出警告.在c ++(我们只支持Microsoft编译器)中,我们会__declspec(deprecated)在函数声明之前添加以实现我们的目标.

我可以在我的接口方法声明前面添加它,还是有更好的,更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;
}
Run Code Online (Sandbox Code Playgroud)

使用这种方法弃用方法时,在尝试使用OldMethod时根本没有编译器警告.我是否有使用__declspec(deprecated)纯虚方法的限制?

再次感谢

ndk*_*pel 6

__declspec(deprecated)是MS C/C++编译器的源代码级功能,不会影响任何内容的二进制布局(ABI) - 因此用户不必重新编译.其结果是通过包含C++头文件向任何调用该方法的人发出编译时警告.它不会影响使用您的对象作为COM对象的人,而不包括您的标题,例如来自其他语言.我不相信COM/IDL本身提供类似的"弃用"属性.

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