关闭

MFC-局域网聊天工具bug集锦

标签: VS2013 MFC
517人阅读 评论(0) 收藏 举报
分类:

基于socket_src目录下的lantalker的编译问题及解决(这跟下面的问题无关,只是方便博主记忆)

程序名称:talker3

工具:VS2013


1.cannot convert from const char a[6] to CString
本来的代码是:CString str = "recv-";
解决:改成 CString str = _T("recv-");就行了

2.cannot convert argument 2 from 'wchar_t*' to 'const char*'
解决:设置项目属性->配置属性->常规->修改unicode为多字符集

注:关于字符的错误还有一种可能的就是:#include<tchar.h>

3.用VS2013编译VS6写的程序时出现:building an mfc project for anon-unicode character set is deprecated.
原因:用于多字节字符编码 (MBCS) 的 MFC 库 (DLL) 不再包含于 Visual Studio 中,但是可用作插件
解决:下载mfc安装就行了

4.‘gethostbyname’: Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
   还有'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
解决:#define _WINSOCK_DEPRECATED_NO_WARNINGS还是没有用
最终方案:设置项目属性->C/C++ ->常规->SDL设为No

5.编译成功以后运行程序:“创建套接字错误”
原因:talker3.cpp中的InitInstance()函数里没有初始化套接字环境,复制代码用AfxSocketInit()函数初始化

6.解决了问题5之后编译出现:identifier "AfxSocketInit" is undefined
解决:#include "Afxsock.h"

这样创建套接字就成功了,但是绑定地址有错误,明天解决。但是对话框已经能加载了

7.绑定地址错误是因为之前就已经把3456号端口绑定过了,还没有正常关闭,所以失败
换一个端口号就行了

8.解决了上面的问题后成功运行了程序,却出现问题:
创建套接字和绑定地址都没问题,但是一按发送键对话框就自己退出了,查看端口也发现刚绑定好的端口没了
原因:使用的默认的“确认”控件,所以在响应函数里会自动生成代码:

void Ctalker3Dlg::OnBnClickedOk()
{
	// TODO: Add your control notification handler code here
	CDialogEx::OnOK();//把这一句注释就行了,原因自己想
	//这下面是我自己写的响应代码
}

9.error LNK2001: unresolved external symbol "protected: long __thiscall Ctalker3Dlg::OnTrayNotification(unsigned int,long)
原因:OnTrayNotification(unsigned int,long)函数只声明了但是没有定义
解决:在.cpp文件中加上函数的实现就行了,如:
LRESULT Ctalker3Dlg::OnTrayNotification(WPARAM uID, LPARAM lEvent)		
{
	return m_trayIcon.OnTrayNotification(uID, lEvent);
}

10.error rc2135:file not found:0
这个错误一般就是.rc文件有问题了,要不就是不小心修改了什么东西,要不就是用notepad++修改后保存,但是字符集有问题不是unicode
解决:这个问题我还没解决,试着用记事本打开这个文件,然后另存为unicode重编译还是不行

11.C1189: #error :  Please use the /MD switch for _AFXDLL builds
描述:我用debug版本编译后在没有装vs的电脑上运行不了,后改为release版本还是不行。
现在想在release版本下用静态编译,我是这么设置的:
项目属性->C/C++->代码生成->运行库选择“多线程/MT”,编译出现上面的错误
解决:项目属性->配置属性->general->use of mfc选择use mfc in static library



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:103367次
    • 积分:3020
    • 等级:
    • 排名:第12056名
    • 原创:204篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    最新评论