一个基于对话框的MFC程序,已经在对话框类里声明了
DWORD WINAPI ThreadProcEvent(LPVOID pParam);
在cpp里的创建语句如下:
[code]
hThreadEvent = CreateThread(NULL,
                                0,
                (LPTHREAD_START_ROUTINE)ThreadProcEvent,
                    &dwParam,
                    0,
                        &dwThreadID);
[/code]结果报错:error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
已经包含了process.h。

解决方案 »

  1.   

    UNIT ThreadProcEvent(LPVOID pParam); 
    这样呢
      

  2.   

    线程函数声明不对,返回值类型为UINT
      

  3.   

    [code]
    DWORD CCommApiDlg::ThreadProcEvent(LPVOID pParam)
    {
      DWORD dwEvtMask,dwRes;
      Eol.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
      while(fEventRun)
      {
        WaitCommEvent(hCom,&dwEvtMask,&Eol);
    dwRes = WaitForSingleObject(Eol.hEvent,100);
        switch(dwRes)
    {
    case WAIT_OBJECT_0:
    switch(dwEvtMask)
    {
    case EV_RXCHAR:
    if(!fStopMsg)
    {
      fStopMsg = true;
      ::PostMessage(hWnd, WM_MYMSG, 0, (LPARAM)EV_RXCHAR);
    }
    break;
    case EV_TXEMPTY:
    AfxMessageBox("发送缓冲区为空");
    break;
    }
    break;
    }
      }
      return true;
    }
    [/code]
      

  4.   

    [code]
    DWORD CCommApiDlg::ThreadProcEvent(LPVOID pParam)
    {
      DWORD dwEvtMask,dwRes;
      Eol.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
      while(fEventRun)
      {
        WaitCommEvent(hCom,&dwEvtMask,&Eol);
    dwRes = WaitForSingleObject(Eol.hEvent,100);
        switch(dwRes)
    {
    case WAIT_OBJECT_0:
    switch(dwEvtMask)
    {
    case EV_RXCHAR:
    if(!fStopMsg)
    {
      fStopMsg = true;
      ::PostMessage(hWnd, WM_MYMSG, 0, (LPARAM)EV_RXCHAR);
    }
    break;
    case EV_TXEMPTY:
    AfxMessageBox("发送缓冲区为空");
    break;
    }
    break;
    }
      }
      return true;
    }
    [/code]
      

  5.   

    已经在对话框类里声明了 
    DWORD WINAPI ThreadProcEvent(LPVOID pParam); 
    =============================
    线程函数只能是全局的或是静态成员函数,另外返回值确实是UINT
      

  6.   

    刚才不知怎么代码没贴出来,没法编辑,就此再开一楼:DWORD CCommApiDlg::ThreadProcEvent(LPVOID pParam)
    {
      DWORD dwEvtMask,dwRes;
      Eol.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
      while(fEventRun)
      {
        WaitCommEvent(hCom,&dwEvtMask,&Eol);
    dwRes = WaitForSingleObject(Eol.hEvent,100);
        switch(dwRes)
    {
    case WAIT_OBJECT_0:
    switch(dwEvtMask)
    {
    case EV_RXCHAR:
    if(!fStopMsg)
    {
      fStopMsg = true;
      ::PostMessage(hWnd, WM_MYMSG, 0, (LPARAM)EV_RXCHAR);
    }
    break;
    case EV_TXEMPTY:
    AfxMessageBox("发送缓冲区为空");
    break;
    }
    break;
    }
      }
      return true;
    }
      

  7.   

    搞定了,我把函数的声明放在对话框类里去了,现在放在cpp文件的最上面就好了,果然是相当的全局~
    感谢哦~~
      

  8.   

    函数什么申明要是 static DWORD ThreadProEvent(...)