奇妙な問題が見つかりました。私のMFCアプリケーションでは、CEnditにCWndポインタをキャストしようとしています。 GetFocus関数を介してCWndポインタを取得します。 dynamic_cast<CEdit*>(pWnd)
を実行すると、0が返されます。MndでCWndのCEditポインタへのポインタをキャスト
答えて
最初に、MFCライブラリはRTTIを有効にしてコンパイルされないため、dynamic_cast
は動作しません。
第二に、CWnd::FromHandle
によって返さCWnd*
は、いずれかの現存CWnd
ある、またはどれも、HWND
周りフライ級ラッパーが存在しない場合。フライウェイトラッパーが返された場合、HWND
がエディットコントロールを参照していても、CEdit
になりません。
HWND
を保持するためにCEdit
を既に作成している場合は、CEdit
が表示されます。
あなたはCWnd*
あなたが得るがHWND
に添付するAttach
を呼び出して、明示的に作成する必要がありCEdit*
を取得するにはCWnd::FromHandlePermanent
を使用して、既存のオブジェクトのためのものであることを知りたい場合。
はあなたがカンニングしたい場合は別の方法として、CEdit
はデータメンバや仮想関数を持っていないし、それはまったく同じで、メモリレイアウトを持っているので、あなたは、(理論的には安全ではない)static_cast
を使用することができCWnd
から直接継承します。
実際はstatic_castがうまく動作します。唯一のポイントは、どのような種類の要素に焦点が当てられているかを確認する必要があることです。だから私はあなたにdynamic_castできると思った。 – besworland
いいえ、あなたは 'GetClassName(HWND)'をする必要があります。 – Ben
GetClassNameは良い方法です!ありがとうございました! – besworland
- 1. 配列へのポインタへのポインタのキャスト
- 2. C++型キャスト:voidポインタからクラスポインタへのポインタをキャスト
- 3. 任意の型ポインタへのvoidポインタのキャスト
- 4. ポインタへのポインタ
- 5. ポインタへのポインタ?
- 6. 構造体へのvoidポインタのキャスト
- 7. 構造体とキャストへのポインタ
- 8. C++ポインタへのポインタのポインタへのポインタのコピー
- 9. ポインタとC/C++でのキャスト
- 10. 型キャストcharポインタを整数ポインタ
- 11. Objective-Cのポインタへのポインタ
- 12. ポインタの混乱へのポインタ
- 13. COM/ATLのポインタへのポインタ
- 14. ポインタのベクトルへのポインタ
- 15. へのポインタへのポインタのConst変換
- 16. 構造体へのポインタへのポインタ
- 17. ポインタへのポインタ配列
- 18. Common Lisp CFFI:ポインタへのポインタ
- 19. (constへのポインタ)から(constへのポインタへの)キャストが無効なC++ですか?
- 20. ポインタがポインタにない場合のポインタへのポインタの衝突
- 21. C++関数ポインタのキャスト
- 22. Objective-Cポインタへの間接ポインタの、 'CFReadStreamRef *'へのキャストはARCで許可されていません
- 23. 異なるポインタ型の引数ポインタとしてのキャスト関数ポインタ
- 24. C++でのポインタの割り当て。 (ポインタへのポインタへのポインタはLHS上にあります)
- 25. イニシャライザをポインタにキャストする
- 26. C++ポインタへのポインタの削除
- 27. ヌルロールリストビューへのポインタ
- 28. バブルソートポインタへのポインタ
- 29. C++のポインタ - 紛争宣言とへのポインタのポインタ
- 30. ポインタと関数ポインタ間の型キャスト時の警告
あなたの 'CWnd'ポインタは実際に' CEdit'コントロールへのポインタですか? –
Yeap。私はそれがCEditコントロールを指していることを確認しました。 GetDlgCtrlIDを呼び出すと、コントロールのIDが返されます。 – besworland
RTTIが有効になっていますか?これはC++コンパイラの設定で確認できます – msteiger