描述:
我写的UDP接受控件
int CDTSockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
InitSocket();
RECVDATA * pRecvData=new RECVDATA;
pRecvData->sock=m_socket;
pRecvData->hwnd=m_hWnd;
HANDLE handle=CreateThread(NULL,0,RecvPro,pRecvData,0,0); CloseHandle(handle);
return 0;
}
然后我也定义了一个函数(是写在类里面,但是不是类函数)
DWORD WINAPI RecvPro(LPVOID lpParameter)
{
SOCKET sock=((RECVDATA*)lpParameter)->sock;
HWND hwnd=((RECVDATA*)lpParameter)->hwnd;
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
... ...
... ...
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)Recvpf);
return 0;
}
但是运行时候出错:
E:DTSockCtl.cpp(242) : error C2065: 'RecvPro' : undeclared identifier
E:DTSockCtl.cpp(288) : error C2373: 'RecvPro' : redefinition; different type modifiers
我想问问大家我该怎么改呢?
解决方案1:
RecvPro 是全局函数 他的作用域从他定义的地方开始到文件最后结束 RecvPro 在 CreateThread 后边 当然不在作用于里面了 或者你把DWORD WINAPI RecvPro(LPVOID lpParameter) 拿到文件的最前边 一般全局函数都放在前边
解决方案2:这是你缺少对应的lib库文件
工程中包含ws_32.lib 解决方案3:
代码就这些?RecvPro在哪个文件中定义的?是否在其它函数中又有定义?