CInternetSession:同样的代码vc6正确,vc2008却得到乱码?为什么?
写了一个用CInternetSession获取网页html的程序。控制台程序,代码如下:
#include "stdafx.h"
#include <afxinet.h>
#include <Afx.h>
int _tmain(int argc, _TCHAR* argv[])
{
CString szSiteInfo,szSiteName;
szSiteInfo="";
szSiteName="http://www.baidu.com";
CInternetSession mySession(_T("Update 1.0"),1,INTERNET_OPEN_TYPE_DIRECT);
CHttpFile* myHttpFile=NULL;
szSiteInfo=_T("连接到站点")+szSiteName+_T("\r\n");
CString myData;
myHttpFile=(CHttpFile*)mySession.OpenURL(szSiteName);
while(myHttpFile->ReadString(myData))
{
szSiteInfo=szSiteInfo+_T("\r\n");
szSiteInfo+=myData;
}
::MessageBox(NULL, szSiteInfo, _T("结果"), MB_OK);
myHttpFile->Close() ;
mySession.Close() ;
return 0;
}
发现用vc6编译运行,弹出的对话框显示出取得的html,正常。而用vc2008编译运行,弹出的对话框里html全是乱码!为什么会这样?
另外还有个关于静态编译的问题。以上代码在vc6中选“Use MFC in a Static Library”或者“Use MFC in a Shared DLL”都是没有问题的。但如果在vc2008中只能选用“在共享DLL中使用MFC”才能编译通过,如果采用“在静态库中使用MFC”,在编译时则会出现以下编译错误:
error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
fatal error LNK1169: 找到一个或多个多重定义的符号
为什么会这样?如何解决这个编译问题,因为这个程序我是想静态编译的。
[解决办法]
第一个问题:
字符集的问题,如果VC6是正确的,那你把2008的工程改成多字节集试试
第二个问题:
如果不想太麻烦,就重建一个新的工程,直接选 静态库 就可以了,然后把原工程中的文件加入到新的工程中。
这个问题可以是把VC6转成VC9时,原工程中的一些设置与新版编译器有冲突。
[解决办法]
装一个VC2008 SP1试试。可能是Unicode版本的ReadString有错误。
把工程改成ANSI试试。或者自己用read()一个一个读。
[解决办法]
在工程选项中忽略这个库 LIBCMTD.lib
[解决办法]
一般VC6正确,而VS2005之类的不正确的话,字符集是最常见的原因。
[解决办法]
字符集