Visual Studio2012でC++(11)を使用しています。
カスタムメイドのラッパークラスを使用してウィンドウを作成します。
CUIWindow* winA = new CUIWindow ( NULL, TEXT("winAClassName"), TEXT("winACaption"), 200, 300 );
各ウィンドウには、pluggabeイベント用の一連の「ソケット」があります。
public:
LPFNCUIWINDOWONCLOSE OnClose;
LPFNCUIWINDOWONDESTROY OnDestroy;
LPFNCUIWINDOWONNOTIFY OnNotify;
LPFNCUIWINDOWONSIZE OnSize;
LPFNCUIWINDOWONHOTKEY OnHotkey;
メッセージループでウィンドウクラスに割り当てることができるさまざまなソケットを呼び出すために、次のマクロを使用します。
#define MapEvent(e, fn) \
{ \
case e: \
if ( fn != nullptr ) \
return static_cast<LPARAM>( HANDLE_##e((hWnd), (wParam), (lParam), fn) ); \
}
私は以下のような状況にあります。
pWindowはCUIWindowオブジェクトへの有効なポインタであると想定できます。
示されているブレークポイントでは、初期化されていないOnXXXXイベントの一部が0xCDCDCDCDとして定義され、メッセージが到着したときに呼び出されます(クラスの作成後に実際に明示的に設定することはありません)。関数ポインタが不良であるため、これにより0x0BADFOOD例外が発生します。null関数ポインタがキャッチされたif ( fn != nullptr )
と思っていたのですが、今はよくわかりません。助けを求めています。
- これが発生している理由を説明する
- ソケットが非常に多い場合があるため、コンストラクターですべての関数ポインターを明示的にゼロに設定せずに、これが発生しないようにするための最良の方法を見つけてください。