当前位置: 代码迷 >> VC >> 请问一个“尝试读取或写入受保护的内存”的有关问题
  详细解决方案

请问一个“尝试读取或写入受保护的内存”的有关问题

热度:1043   发布时间:2013-02-25 00:00:00.0
请教一个“尝试读取或写入受保护的内存”的问题
将一个基于mfc的exe项目中部分函数改造为dll函数输出,遇到了上面的问题,请帮忙看一下,谢谢。
函数很简单:
void CTestDlg::CatchWindow()//取出顶层的窗口
{
m_pWindow = GetForegroundWindow();
CString windowname;
m_pWindow->GetWindowText(windowname);
}
m_pWindow 的定义
public:
CWnd* m_pWindow;//游戏窗口
这个函数在exe程序中使用是没有问题的,如果写到dll中调用就出现了如题的问题,请问如何解决?
dll的代码:
void CTestDllApp::CatchWindow()
{
m_pWindow=CWnd::GetForegroundWindow();
CString windowname;
m_pWindow->GetWindowText(windowname);
}
......
CTestDllApp theApp;

extern "C" _declspec(dllexport) void Catch()
{
theApp.CatchWindow();
}
将第一句换成
HWND hwnd=GetForegroundWindow();
m_pWindow=CWnd::FromHandlePermanent(hwnd); 或者m_pWindow->Attach(hwnd); 
都报一样的错误。

------解决方案--------------------------------------------------------
看GetForegroundWindow返回的是不是NULL。
------解决方案--------------------------------------------------------
可能是this指针为空,或者对象的内存空间已经被释放了,从你前面的描述看不出是哪里造成的问题。
  相关解决方案