首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CInternetSession:同样的代码vc6正确,vc2008却得到乱码?为什么?解决办法

2012-02-16 
CInternetSession:同样的代码vc6正确,vc2008却得到乱码?为什么?写了一个用CInternetSession获取网页html的

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之类的不正确的话,字符集是最常见的原因。
[解决办法]
字符集

热点排行