一个编译错误,大家帮忙看看

pursuit 2003-08-19 10:40:40
原来是一个C写的SDK程序,我在eVC中新建了一个类CSerial,然后把C程序中的函数移到了新类中,编译时出错。相关代码:
......
if (hReadThread = CreateThread (NULL, 0, ReadPortThread, 0, 0, &dwThreadID))
......

DWORD CSerial::ReadPortThread(LPVOID lpvoid)
{
...
}

出现编译错误:
error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__cdecl *)(void *)'
None of the functions with this name in scope match the target type
请问该如何解决?谢谢
...全文
25 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pursuit 2003-08-20
  • 打赏
  • 举报
回复
多谢各位的热心。但我按你们的方法改了以后重新编译,错误仍然存在,错误描述相同。不知是何原因?
wangweintk 2003-08-19
  • 打赏
  • 举报
回复
按楼上的方法就可以了。

回调函数的定义必须遵守系统的约定,才行。
xtuzi 2003-08-19
  • 打赏
  • 举报
回复
DWORD CSerial::ReadPortThread(LPVOID lpvoid)
应该定义成静态成员函数
DWORD WINAPI CSerial::ReadPortThread(LPVOID lpVoid)
zlc990405 2003-08-19
  • 打赏
  • 举报
回复
DWORD WINAPI CommSendMsgThread(LPVOID lp );

DWORD WINAPI CommSendMsgThread(LPVOID lp) //WINAPI
{
。。。。
}

hdlCommSendMsgThread = CreateThread( &sa, 0,
(LPTHREAD_START_ROUTINE)CommSendMsgThread,
this, 0, &dwCommSendMsgThreadId );
zlc990405 2003-08-19
  • 打赏
  • 举报
回复
对了,最好全部重新编译一下,我刚才就出现类似的问题。
zlc990405 2003-08-19
  • 打赏
  • 举报
回复
把那个线程申明为全局函数,当然也要加winapi了,你再试试
mfc168 2003-08-19
  • 打赏
  • 举报
回复
DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{
...
}

......
if (hReadThread = CreateThread (NULL, 0, ReadPortThread, 0, 0, &dwThreadID))
......


pursuit 2003-08-19
  • 打赏
  • 举报
回复
两位:
不行啊。我加入了WINAPI后,编译还是显示这个错误。我用的是eVC 4.0

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧