为了账号安全,请及时绑定邮箱和手机立即绑定

我刚才查错的时候把强制类型转换去掉了,还是类似的错误。该怎么办?

我刚才查错的时候把强制类型转换去掉了,还是类似的错误。该怎么办?

HUX布斯 2022-07-15 12:11:39
大体是这样的:在头文件的类外添加线程函数声明void ThreadFunc();在类内部添加protected型变量: HANDLE hThread;DWORD ThreadID;编写线程函数在主函数中创建该线程hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunction,NULL,0,&ThreadID);问题就是创建线程时出错,cannot convert parameter 3 from 'void (void)' to 'unsigned long (__stdcall *)(void *)'错误的位置就在创建线程里的(LPTHREAD_START_ROUTINE)ThreadFunction上,还问高手这怎么回事啊????错误提示是'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

你可以参考下。
你要是调用 CreateThread 函数的话,那么线程过程函数不是随便定义的。他要求一个标准的返回值
DWORD WINAPI ThreadFun(LPVOID para);
参数名和函数名你可以随意,其他不要变。
你编译器中返回的错误也说了,CreateThread的第三个参数的返回值不能是void,必须是一个 'unsigned long (__stdcall *) 并且参数是(void *) 的函数地址值。
看到这个错误提示后,你就应该照着提示区改就可以了。将你的函数声明按照提示更改就一切ok了。
DWORD WINAPI 就是 unsigned long (__stdcall *) 的一个宏。

查看完整回答
反对 回复 2022-07-18
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

DWORD WINAPI ThreadFunction( LPVOID p )
{
MessageBoxA( NULL, "", "这是子线程", 0 );
}
...
HANDLE hThread = CreateThread( NULL, 0, ThreadFunction, NULL,
NULL, NULL );
CloseHandle( hThread );

你的基础还很薄弱,先从最基本的C、C++的语言本身学起。等掌握了C或者C++,再来学习Windows API。


查看完整回答
反对 回复 2022-07-18
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

将强制类型转换去掉就是了。这里参数传递的是线程的首地址。

查看完整回答
反对 回复 2022-07-18
  • 3 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信