我正在尝试找几个小时的解决方案而且我很困惑。我写了一个简单的包装器来创建一个win32窗口。我有一个静态窗口程序。包装器还有一个std :: map存储用于消息处理的函子。窗口过程通过地图发现,如果iretator找到某个消息的仿函数,它会执行仿函数而不是默认的windows过程。当我像这样创建类的对象时
Window window;
window.create();
我没有错误,一切正常。但如果我尝试:
Window* window;
window = new Window("test");
window->create();
我的应用程序崩溃了。从内存中读取时出现访问冲突。问题是 在静态窗口过程函数中。当我开始在地图上进行模仿时,就会发生访问冲突。这是我班级的一些示例代码:
class Window
{
private:
std::map<unsigned int, Functor*> MessageContainer;
public:
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
// Get a pointer to the window instance from (LPCREATESTRUCT)lParam
if(instance != 0)
{
std::map<unsigned int, Functor*>::iterator it = instance->MessageContainer.find(uMessage);
}
}
};
我缩短了代码以显示关键部分。我的实例指针是有效的,因为我测试了我的窗口类的其他成员并且它工作。只是对容器感到厌倦会产生访问冲突。
我希望有人可以提前帮助和感谢!