一个类里的两个函数,再其中一个函数中以建立线程的函数执行另一个函数,出现以下错误,被启动的函数声明如下(我认为可能和生命有关):DWORD WINAPI ReceiveThread(LPVOID lpparam);建立线程的代码是:hThread=CreateThread(NULL,NULL,ReceiveThread,(LPVOID)(&index),0,&dwThreadId);D:\编程\项目\Client\ClientDlg.cpp(270) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'请问,应该怎么改?

解决方案 »

  1.   

    你把函数声明
    DWORD WINAPI ReceiveThread(LPVOID lpparam);
    改成
    unsigned long (void *) ReceiveThread(LPVOID lpparam);
    应该就可以了
      

  2.   

    不行啊,错误更多了。
    我想可能和(__stdcall *)有关系。
      

  3.   

    给你个msdn中的例子:
    #include <windows.h>
    #include <conio.h>DWORD WINAPI ThreadFunc( LPVOID lpParam ) 

        char szMsg[80];    wsprintf( szMsg, "Parameter = %d.", *(DWORD*)lpParam ); 
        MessageBox( NULL, szMsg, "ThreadFunc", MB_OK );    return 0; 

     
    VOID main( VOID ) 

        DWORD dwThreadId, dwThrdParam = 1; 
        HANDLE hThread; 
        char szMsg[80];    hThread = CreateThread( 
            NULL,                        // default security attributes 
            0,                           // use default stack size  
            ThreadFunc,                  // thread function 
            &dwThrdParam,                // argument to thread function 
            0,                           // use default creation flags 
            &dwThreadId);                // returns the thread identifier 
     
       // Check the return value for success. 
     
       if (hThread == NULL) 
       {
          wsprintf( szMsg, "CreateThread failed." ); 
          MessageBox( NULL, szMsg, "main", MB_OK );
       }
       else 
       {
          _getch();
          CloseHandle( hThread );
       }
    }
      

  4.   

    那你再这样调用试试:
    hThread=::CreateThread(NULL,NULL,ReceiveThread,(LPVOID)(&index),0,&dwThreadId);
      

  5.   

    首先声明我是绝对的菜^_^课本上是这么说的:
    HANDLE CreateThread(
      LPSECURITY_ATTRIBUTES lpThreadAttributes,  // pointer to security attributes
      DWORD dwStackSize,                         // initial thread stack size
      LPTHREAD_START_ROUTINE lpStartAddress,     // pointer to thread function
      LPVOID lpParameter,                        // argument for new thread
      DWORD dwCreationFlags,                     // creation flags
      LPDWORD lpThreadId                         // pointer to receive thread ID
    );
    其中第三个参数是一个函数指针,应该给它赋的值是一个地址的值。从编译器所报的错误看应该是类型不匹配造成的,所以应该检查一下是不是类型定义错误(我也不知道是不是对的)你检查一下是不是,如果不对的话十分抱歉。
      

  6.   

    一个类里的两个函数,再其中一个函数中以建立线程的函数执行另一个函数,出现以下错误,被启动的函数声明如下(我认为可能和生命有关):DWORD WINAPI ReceiveThread(LPVOID lpparam);
    ----------------------------------------
    这个函数的声明应该为
    static DWORD WINAPI ReceiveThread(LPVOID lpparam);
      

  7.   

    如果我这样写:static DWORD WINAPI ReceiveThread(LPVOID lpparam);
    那给它传递的参数和它能访问的变量是不是也得声明为static的形式啊?我曾经试过这样改,就莫名其妙的出来好多的错误。