我头文件写的是:
protected:
// 处理完成端口的消息的线程函数
DWORD WINAPI WorkerThread(LPVOID);
.cpp使用的时候,是:
m_WorkProcId[i]=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&CnetserverDlg::WorkerThread,CompletionPort, 0, &dwThreadId);可是它报错,说是;
error C2440: “类型转换”: 无法从“DWORD (__stdcall CnetserverDlg::* )(LPVOID)”转换为“LPTHREAD_START_ROUTINE”请问这个原因是什么啊?
protected:
// 处理完成端口的消息的线程函数
DWORD WINAPI WorkerThread(LPVOID);
.cpp使用的时候,是:
m_WorkProcId[i]=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&CnetserverDlg::WorkerThread,CompletionPort, 0, &dwThreadId);可是它报错,说是;
error C2440: “类型转换”: 无法从“DWORD (__stdcall CnetserverDlg::* )(LPVOID)”转换为“LPTHREAD_START_ROUTINE”请问这个原因是什么啊?
解决方案 »
- dll自己怎么加载位图资源
- 关于对话框添加背景图片,OnEraseBkgnd,直接运行正常,开机启动才崩溃。
- 在编译过程中连接DLL错误的问题
- socket错误,请各位帮帮忙
- 图形高手请进
- VC中如何动态创建一个Button并为其加之一OnClick的消息响应函数
- 几个常识问题,回答马上给分。waiting...........
- 在FormView派生类里面创建FormView,调用ShowWindow出错
- 请问,从CList模板实例出一个对象m_nList,m_nList销毁时其内容是否会自动销毁?
- 高分求教:NetAnts是怎么实现线程间相互通信的?
- mfc做的activex控件,文件是pingctrol.ocx,请问能直接嵌入网页吗?
- ADO访问数据库
1> 在匹配目标类型的范围内没有具有该名称的函数还是不行啊
1>d:\jl\netserver\netserver\netserverdlg.cpp(125) : error C2597: 对非静态成员“CnetserverDlg::m_serverSocket”的非法引用
1>d:\jl\netserver\netserver\netserverdlg.cpp(127) : error C2597: 对非静态成员“CnetserverDlg::CompletionPort”的非法引用这2个变量,不能是静态的啊,请问有什么可以解决的不?
我现在的就是:
DWORD WINAPI WorkerThread(LPVOID);// CnetserverDlg 对话框
class CnetserverDlg : public CDialog
{
private:
//完成端口
HANDLE CompletionPort;
// 服务器SOCKET
SOCKET m_serverSocket;
}
extern DWORD WINAPI WorkerThread(LPVOID);
// CnetserverDlg 对话框
class CnetserverDlg : public CDialog
{ friend DWORD WINAPI WorkerThread(LPVOID);
private:
//完成端口
HANDLE CompletionPort;
// 服务器SOCKET
SOCKET m_serverSocket;
}
// 开始监听的线程函数
void WINAPI ListenProc();
// 处理完成端口的消息的线程函数
DWORD WINAPI WorkerThread(LPVOID);
class CnetserverDlg : public CDialog
{
// 构造
public:
friend void WINAPI ListenProc();
friend DWORD WINAPI WorkerThread(LPVOID);
private:
//完成端口
HANDLE CompletionPort;
// 服务器SOCKET
SOCKET m_serverSocket;
}
void WINAPI ListenProc()
{
// 临时客户端的SOCKET
SOCKET sClient;
int iaddrSize = sizeof(SOCKADDR_IN);
PPER_IO_DATA lpPerIOData;
while (TRUE)
{
sClient = accept(m_serverSocket, (struct sockaddr *)&sClient, &iaddrSize);//<----这里报错: error C2065: “m_serverSocket”: 未声明的标识符
}
一个是全局的线程入口函数, 如DWORD WINAPI ThreadEntry(LPVOID p);
一个是真正的线程处理函数, 而且是你的类的成员函数, 如CYourClass::DoThread(...);将ThreadEntry做为CreateThread(...)的参数, 将CYourClass指针做为ThreadEntry(...)的参数, 并在ThreadEntry中调用CYourClass::DoThread。
比如, 将void WINAPI ListenProc() 改为void WINAPI ListenProc(CnetserverDlg* pDlg);
然后再在ListenProc函数体中这样引用:pDlg->m_serverSocket;