我正在使用带有 Visual Studio 2012 的 C++(11)。
我使用定制的包装类创建窗口。
CUIWindow* winA = new CUIWindow ( NULL, TEXT("winAClassName"), TEXT("winACaption"), 200, 300 );
每个窗口都有一系列用于插件事件的“套接字”。
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 异常,因为函数指针是错误的。我会假设空函数指针会被捕获,if ( fn != nullptr )
但是现在我不太确定,我正在请求帮助;
- 解释为什么会发生这种情况
- 找到阻止这种情况发生的最佳方法,最好不要在构造函数中将所有函数指针显式设置为零,因为有时会有很多很多套接字。