一番下に答えました。ありがとう!
コンパイラは、リリース バージョンでエラー C2039 および C2065 を正しくキャッチしました。
同じコードがデバッグ バージョンでコンパイルに合格できるのはなぜですか?
これはマイクロソフトの既知のバグですか?
DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC で問題が解決することはわかっています。しかし、それらがなければ、なぜ Microsoft は私のデバッグ バージョンでコンパイルに合格したのでしょうか? これが質問です。
理由が判明。マイケルの答えは正確です。_AFXDLL は、私のデバッグ構成でのみ定義されています。したがって、デバッグ バージョンでは、マクロ RUNTIME_CLASS を展開するときに CObject::GetThisClass を使用しています。
したがって、次のコードは、DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC が宣言されていない場合、リリース バージョンとデバッグ バージョンの両方でコンパイラ エラーが発生します。
CRuntimeClass* p = (CRuntimeClass*) (&XXX::classXXX);
ただし、次のコードは、_AFXDLL が事前定義されていない場合にのみ失敗します。
p->IsKindOf(RUNTIME_CLASS(XXX))
ありがとう