一个类里的两个函数,再其中一个函数中以建立线程的函数执行另一个函数,出现以下错误,被启动的函数声明如下(我认为可能和生命有关):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 *)'请问,应该怎么改?
解决方案 »
- 请问和各位高手 如何将一个JPG图像文件的大小改变成一个指定值?
- MFC扩展DLL中定义的成员变量无法被赋值
- 献出啦,自己开发上传了一个软件,欢迎下载
- 懂winpcap的兄弟快来啊,有问题请教,急急急(200分)~~~SOS
- 只给程序员看的问题!
- 什么是LPC Reply
- ODBC的CRecord中怎么调带输出参数的存储过程?
- 请教:用_RecordsetPtr_open调用_ConnectionPtr建立的联接,能否用RecordCount记数?
- 请问我想实现让CRichEditCtrl 的滑块自动到最下面,就是自动下滚,快!help!
- windows如何停止一个正在拷贝工作的线程?
- 问:程序运行的时候谁调用OnDraw()函数(解答越详细越好)?
- 求援!!!!
DWORD WINAPI ReceiveThread(LPVOID lpparam);
改成
unsigned long (void *) ReceiveThread(LPVOID lpparam);
应该就可以了
我想可能和(__stdcall *)有关系。
#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 );
}
}
hThread=::CreateThread(NULL,NULL,ReceiveThread,(LPVOID)(&index),0,&dwThreadId);
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
);
其中第三个参数是一个函数指针,应该给它赋的值是一个地址的值。从编译器所报的错误看应该是类型不匹配造成的,所以应该检查一下是不是类型定义错误(我也不知道是不是对的)你检查一下是不是,如果不对的话十分抱歉。
----------------------------------------
这个函数的声明应该为
static DWORD WINAPI ReceiveThread(LPVOID lpparam);
那给它传递的参数和它能访问的变量是不是也得声明为static的形式啊?我曾经试过这样改,就莫名其妙的出来好多的错误。