1、
在定义指针时候出错,本来定义为
CServerDlg _ServerDlg;
CServerDlg *ServerDlg = &_ServerDlg;
后来改为CServerDlg *ServerDlg就好了。
2、
上述问题pIOCPServer->strRecv.Format("send message : s%\n",lpPerIOData->wbuf.buf) ; 原因是lpPerIOData->wbuf.buf本身是char* ,不需要格式化。
3、
f:\c++\server\server\clientserver.cpp(132) : error C2660: “MessageBoxA”: 函数不接受1 个参数
MessageBox(NULL, "到达这了。", "提示", MB_OK);
这个可以用。
但是我还是不知道怎么回事
MessageBox("到达这了。");
这个我在同一个程序里面的另一个类中可以用哦
答:
MessageBox(NULL, "到达这了。", "提示", MB_OK);这样调是调用的win32 api
MessageBox("到达这了。");是MFC对win32 api的封装(应该是在某个窗体类里面调用的)。
4.
1>f:\c++\server\server\ServerDlg.h(15) : error C2065: “IDD_SERVER_DIALOG”: 未声明的标识符
1>生成日志保存在“file://f:\C++\Server\Server\Release\BuildLog.htm”
1>Server - 1 个错误,个警告
========== 生成: 成功0 个,失败1 个,最新0 个,跳过0 个==========
出错原因:出错文件中没有包含资源文件ID声明的resource.h文件。在出错文件中加入#include “resource.h”语句。
具体解析
错误的可能原因及解决方法如下:
1.出错文件中没有包含资源文件ID声明的resource.h文件。在出错文件中加入#include “resource.h”语句。
2.工程附件包含目录的路径下没有resource.h文件。修改路径即可。
3.工程所在文件夹下存在resource.h文件,但其中没有资源ID的定义,导致真正的resource.h没有包含进去,删除之。一个解决方案里面有多个工程,可能会把所有资源ID的声明放到一个文件中。在各个工程中实现对话框功能的文件中,只需包含该文件即可。但是,当新增某个资源以后,工程中会自动生成一个resource.h(不知道为什么会这样),而不是在已有的resource.h文件中添加ID的定义。由于工程编译的时候先从本地搜索头文件,会包含了自动生成的头文件,于是出现了上述错误。
注意:如果是智能设备程序出现此错误,应该确保resourceppc.h和Resourceppc.h中都有相同的宏定义#define IDD_DIALOG1 XXX,并且在dialog.cpp中包含资源头文件resourceppc.h
5、
1>GPRSServer.obj : error LNK2019: 无法解析的外部符号"protected: static unsigned long __stdcall CGPRSServer::ServiceThread(void *)" (?ServiceThread@CGPRSServer@@KGKPAX@Z),该符号在函数"protected: static unsigned long __stdcall CGPRSServer::ListenThread(void *)" (?ListenThread@CGPRSServer@@KGKPAX@Z) 中被引用
1>F:\led_control\Server\Server\trunk\Server\Debug\Server.exe : fatal error LNK1120: 1 个无法解析的外部命令
函数未定义,
DWORD WINAPI CGPRSServer::ServiceThread(LPVOID pParam)
{ return 0;}
6、
请教一下 MFC程序中通过点击某一按键让对话框显示指定内容
void CServerDlg::OnBnClickedStop()
{ CString str ="hello";
SetDlgItemText(IDC_EDIT,str);
}
但是如果设置一个全局的对象 再调用显示指定的内容的函数时就能在对话框显示相应内容了
void CServerDlg::OnBnClickedEnd()
{ CString temp = "hello!";
ServerDlg.Edit(temp);
}对象的设定如下CServerDlg ServerDlg = new CServerDlg;
7,
如何获得窗口句柄,并在相应对话框显示内容
每一个从Cwnd类派生出来的类都有一个成员变量m_hWnd,即指向当前窗口的句柄,直接使用它即可。
其中从CWnd类派生出来的类有CFrameWnd、CDialog、CView、CControlBar等等
我的实现方法:(1)设定一个全局变量 HWND H_ServerDlg;
(2)在类的初始化函数里加入H_ServerDlg = this->m_hWnd;
即可
(3)在对话框显示相应内容则用SetDlgItemText(H_ServerDlg,IDC_EDIT,lParam);即可。
在窗口类里也可以GetDlgItem(IDC_CSPort)->GetWindowText(port1);//获得端口号
GetDlgItem(IDC_CSPort)->EnableWindow(FALSE);//设为只读
GetDlgItem(IDC_EDIT1)->SetWindowText(NULL);//清空
在窗口类外让相应控件显示内容
GetDlgItemText(H_ServerDlg,IDC_EDIT1,strTemp_recv,BUFFER_SIZE);
pIOCPServer->strRecv+=(CString)strTemp_recv;
SetDlgItemText(H_ServerDlg,IDC_EDIT1,pIOCPServer->strRecv);
8、
将sockaddr_in 类型转化为char类型,并输出
cstring tmp.Format("%s\r\n",inet_ntoa(pContext->addrLocal.sin_addr));
::SetDlgItemText(H_ServerDlg,IDC_EDIT,tmp);
9、
subWnd=GetDlgItem(IDC_LISTEN_PORT_C); //获得窗口上ID为IDC_LISTEN_PORT_C的对象的句柄
subWnd->GetWindowText(buffer); //获得该句柄对应的输入栏内的信息,存入buffer
port= UINT(atoi(LPCSTR(buffer))); //先将buffer从CString类型转化为LPCSTR(即char*),再通过atoi将其转化为整型
subWnd=GetDlgItem(IDC_SERVERIP);
subWnd->GetWindowText(buffer);
strncpy(serverIP,LPCTSTR(buffer),16); //将获得的字符串存入serverIP
10、
accept函数在第一种情况下非阻塞,而在第二种情况下阻塞。为什么?(可能跟指针有关!)
情况1:m_sAccept=accept(m_sListen,(sockaddr*)&addrRemote,&len);
情况2:ClientServer->m_sAccept=accept(ClientServer->m_sListen,(struct sockaddr *)&addrRemote,NULL);
11、
Server进程退出以后,发现任务管理器里面还有Server.exe还在运行。原因:这个主要是因为在程序中分配的资源在程序退出时没有得到正确的释放。解决方法:将队列里分配的资源全部释放,再次运行就会发现没有后代执行的
12、
原因:悬垂指针的问题。在调用的函数中将指针指向的内存区域释放,但是后来依然对该指针进行了赋值等操作,引起了莫名的错误。