关于SOCKET和LPVOID转换

clzzcl 2003-06-20 04:59:03
我最近刚刚学习socket,用如下语句出错
sClinet是SOCKET类型
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)sClient,0,&dwThreadId);
C2664 (LPVOID)sClient此参数转换不了
在vc6.0里还可以的
...全文
197 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Healer 2003-07-22
  • 打赏
  • 举报
回复
那个三角什么时候可以加啊????
开心:)
clzzcl 2003-06-20
  • 打赏
  • 举报
回复
OK了 楼上的说的对要用 ststic
Healer 2003-06-20
  • 打赏
  • 举报
回复
楼主的意思无非是要把 Socket对象的指针传入工作线程了,

注意:
DWORD WINAPI ClientThread(LPVOID lpData);
要ststic或全局的函数.

注意lpData的显式转化了. 这个没有什么好说的,
(呵呵, 好像实现Socket类啊)
clzzcl 2003-06-20
  • 打赏
  • 举报
回复
现在不是上面出的错,是这句
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&sClient,0,&dwThreadId);

d:\cldata2\clsockct\FarControl\FarControlServer\mysocket.cpp(70): error C2664: “CreateThread” : 不能将参数 3 从“DWORD (LPVOID)”转换为“LPTHREAD_START_ROUTINE”

我的定义
DWORD WINAPI ClientThread(LPVOID lpParm);

实现
DWORD WINAPI mysocket::ClientThread(LPVOID lpParm)
{
SOCKET sock = *(SOCKET*)lpParm;
char szBuff[DEFAULT_BUFFER];
int ret,
nLeft,
idx;
bool bRecvOnly = false;
while(1)
{
ret = recv(sock,szBuff,DEFAULT_BUFFER,0);
if (ret == 0)
.....................
Coold 2003-06-20
  • 打赏
  • 举报
回复
声明和定义都要加上关键字WINAPI啊
DWORD WINAPI ClientThread(LPVOID lpData)
{
SOCKET pClient = *(SOCKET*)lpData;
...
}
clzzcl 2003-06-20
  • 打赏
  • 举报
回复
不是我的声明是对的就是这样
DWORD WINAPI ClientThread(LPVOID lpData);
应该是vc7.0的原因 vc6.0是可以的
不过我不知道怎样解决
Coold 2003-06-20
  • 打赏
  • 举报
回复
漏看了,糊涂。
在线程函数的声明和定义都要加上关键字WINAPI
DWORD WINAPI ClientThread(LPVOID lpData);
clzzcl 2003-06-20
  • 打赏
  • 举报
回复
不行呀!
//建立一个线程
sClient,0,&dwThreadId);hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&sClient,0,&dwThreadId);
出错
d:\cldata2\clsockct\FarControl\FarControlServer\mysocket.cpp(70): error C2664: “CreateThread” : 不能将参数 3 从“DWORD (LPVOID)”转换为“LPTHREAD_START_ROUTINE”

Coold 2003-06-20
  • 打赏
  • 举报
回复
sClinet是SOCKET类型,必须传指针
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&sClient,0,&dwThreadId);
DWORD ClientThread(LPVOID lpData)
{
SOCKET pClient = *(SOCKET*)lpData;
...
}
clzzcl 2003-06-20
  • 打赏
  • 举报
回复
不是CSocket对象,代码如下
SOCKET sClient;
sClient = accept(sServer,(struct sockaddr *)&clientaddr,&iAddrSize);
Phourm 2003-06-20
  • 打赏
  • 举报
回复
sClient是一个CSocket对象吧
不能把一个对象转换成VOID指针
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&sClient,0,&dwThreadId);
DWORD ClientThread(LPVOID lpData)
{
CSocket* pClient = (CSocket*)lpData;
...
}
clzzcl 2003-06-20
  • 打赏
  • 举报
回复
对了我用的是vc7.0

18,358

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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