私が一般的にCOMルールに従いますが、MIDLコンパイルを実行せず他のものを対象にしないので、 c/C++よりも多くの言語をサポートします。このように、私はいつも私のニーズに合わせてルールを曲げることができると知っていますが、いつか本当にCOMに準拠したいと思うかもしれないので、私はしないようにしています。COMインターフェイスでメソッドの廃止予定警告を生成する方法(C++)
誰かが特定のインターフェイスの特定のメソッドを使用してコードをコンパイルすると、警告を表示したいと思います。 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(deprecated)
を使用することについて私が知らない制限がありますか?
おかげで再び
純粋仮想メソッドである非推奨のインターフェイスメソッドを宣言するヘッダーファイルで '__declspec(deprecated)'を使用しようとすると、そのメソッドを使用するコードをコンパイルするときに警告が表示されません。しかし、 '#pragma deprecated'マクロを使用すると警告が表示されます。これは何もないより優れていますが、マクロの使用法は__declspecの場合よりも正確ではありません。カスタム警告メッセージを指定できるからです。また、 '#pragma deprecated'マクロは、インタフェースからではなくても、myメソッドの名前を持つ識別子を対象とします。なぜこのようなことが起こったのか考えていますか? – franmon
あなたの答えに感謝します。あなたの説明がとても良いので、 '__declspec(廃止予定)'ディレクティブを使用できるようにするために私が何ができるかについて他の誰かが私に解決策を与えていなければ、それを勝利としてマークします。 – franmon
@franmon:あなたのコールサイトコードは表示されません。静的型Interface *(またはInterface&)のオブジェクトのメソッドを呼び出していますか? – ndkrempel