void CExam8Dlg::OnSaveKeywordButton() 
{
////
////
////
////
}
void CExam8Dlg::OnStartthreadButton() 
{
HANDLE hand=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);

}DWORD WINAPI ThreadProc(LPVOID lpParameter)
{ OnSaveKeywordButton() ;
return 0;
}错误提示 :error C2065: 'OnSaveKeywordButton' : undeclared identifier明明就定义了,我该怎么做才能调用那个函数呢?求教

解决方案 »

  1.   

    OnSaveKeywordButton() 是对话框成员函数,不能直接调用,需要通过对话框对象调用
    你的情况最好用消息发送给对话框
      

  2.   

    AfxBeginThread (ThreadProc, (LPVOID)GetSafeHwnd());DWORD WINAPI ThreadProc(LPVOID lpParam)
    {
    HWND hWnd = (HWND)lpParam;
    SendMessage(hWnd, UM_MESSAGE, 0, 0);
    return 0;
    }afx_msg LRESULT OnMessage(WPARAM wParam, LPARAM lParam);ON_MESSAGE(UM_MESSAGE, &CXXXDlg::OnMessage)LRESULT CXXXDlg::OnMessage(WPARAM wParam, LPARAM lParam)
    {
     OnSaveKeywordButton();
     return 0;
    }
      

  3.   

    LS正解需要传入OnStartthreadButton()所在类的对象的指针,才可以在线程中调用
      

  4.   

    2楼的不错,或者是把对话框指针传进来HANDLE hand=CreateThread(NULL,0,ThreadProc,this,0,NULL);DWORD WINAPI ThreadProc(LPVOID lpParameter)
    {
    CExam8Dlg *pDlg = (CExam8Dlg*)lpParameter;
    pDlg->OnSaveKeywordButton() ;
    return 0;
    }
      

  5.   

    DWORD WINAPI ThreadProc(LPVOID lpParameter)
    {中的参数,可以把当前窗口类的指针传进来,CExam8Dlg *pDlg = (CExam8Dlg*)lpParameter;
    pDlg->OnSaveKeywordButton() ;就如这种方式,就可以用到类成员函数了。
      

  6.   


    线程函数是你那个类的静态函数。不属于具体对象,所以你得把对象的指针传过去。
    线程函数都有一个LPVOID类型的参数,可以把Dialog的指针传过来。你的OnSaveKeywordButton是Public的吗?
      

  7.   

    提示:
    OnSaveKeywordButton' : cannot access protected member declared in class 'CExam8Dlg'
            h:\microsoft visual studio\myprojects\exam8\exam8dlg.h(54) : see declaration of 'OnSaveKeywordButton'怎么办?救救我啊
      

  8.   

    谢谢 好啦 我把 OnSaveKeywordButton 设置成public就OK了void CExam8Dlg::OnStartthreadButton() 
    {
    HANDLE hand=CreateThread(NULL,0,ThreadProc,this,0,NULL);

    }
    我还想请问 这里的 this 是什么意思?
      

  9.   

    this = CExam8Dlg
    就是这个类本身大哥,你不会连C++的基本知识都甚是缺乏吧?