为什么要在构造函数里再次使用m_Process而且还要赋值才不会出错呢class CShiyan3Dlg : public CDialog 

public: CEdit m_Edit; 
DWORD m_ProcessID;  
}; 
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)  
{  
     
    DWORD pid = 0;  
    CShiyan3Dlg* dlg = (CShiyan3Dlg*)lParam;  
    GetWindowThreadProcessId(hwnd, &pid);  
    if (dlg->m_ProcessID != pid)  
        return TRUE;  
    CString text;  
    text.Format("%08X\r\n", hwnd);  
    dlg->m_Edit.SetWindowText(text);       return FALSE;  
}  
void CShiyan3Dlg::OnButton1()  
{ EnumWindows(EnumWindowsProc, (LPARAM)this);  
}

解决方案 »

  1.   

    你不初始化,这个m_Process数据应该是多少呢?变量不赋值(初始化),编译时提示一下,运行时就会出现莫名其妙的错误了。
      

  2.   

    谢谢回答 还有疑云 就是为什么这个公有数据m_ProcessID非要在构造函数里初始化 为什么不能在那个回调函数里初始化呢 ?
      

  3.   


    晕,你不是要在回调函数里面用这个m_ProcessID作为判断条件的吗?在调用回调函数的时候你这个值都没有确定,你认为你的if语句的比较还有意义吗?你没有设置一个值,它和谁比较吗?
      

  4.   

    我对楼主比较困惑,你为了这个进城ID问题至少花了500分以上6、7个帖子了,可是你的C++基础可以说非常差,向你解释的一些基本原理好像都不理解。你这样学习没有什么意思的,基础的东西不掌握,就来研究什么进程、回调,简直是浪费时间啊。建议你好好找本教材先把语言基础学一学,编程从来不是一个可以迅速掌握的技术,没有足够的知识和积累,事倍功半不值得。
      

  5.   

    看看我的问题
    http://topic.csdn.net/u/20080511/13/06252129-507c-4317-8cea-8ccaf3083a21.html
      

  6.   

    看看我的问题
    http://topic.csdn.net/u/20080511/13/06252129-507c-4317-8cea-8ccaf3083a21.html