Как сгенерировать устаревшее предупреждение для метода в COM-интерфейсе (c++)

Мы используем «COM-подобную» модель, где я работаю, поскольку мы обычно следуем правилам COM, но не выполняем компиляцию MIDL и не ориентируемся на другие языки, кроме с/с++. Таким образом, я знаю, что всегда могу изменить правила в соответствии со своими потребностями, но я стараюсь этого не делать, поскольку когда-нибудь мы можем захотеть стать по-настоящему 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;
}

При таком способе объявления метода устаревшим я не получаю предупреждения компилятора при все при попытке использовать OldMethod. Есть ли ограничение, о котором я не знаю, об использовании __declspec(устаревшего)с чисто виртуальными методами?

Еще раз спасибо

5
задан franmon 28 May 2012 в 23:24
поделиться