微软的VC++ 2005的强大功能让人体验了不一样的感觉,对于习惯了VC++6.0的程序员来说可能会感觉VC++2005总有一些莫名其妙的问题。 诚然,VC++2005是存在着那么一些问题。这让使用VC++2005的新手感觉很不适应,以至于不断有人抱怨。在论坛上也总有人问在VC++2005中编译好的程序在没有装VC的机子上不能运行的问题。大家的回复也是众说纷纭。反而让人更加迷茫。由此就有了这篇文章。

为了避免少走弯路,今天把VC++2005的一些相关问题汇集下来,并给出具体解决方案。

1.最著名的问题-------本机编译好的程序无法在没有装VC的机子上运行

由于VC++2005默认采用动态链接运行时库,导致编译好的程序在运行时依赖于本机的运行时库,当然移植到别的机子上就不能运行了。真不知道微软当初怎么想的,难道把所有人都当程序员么,自己写的程序都是给自己用的?呵呵。不过微软犯迷糊我们不能跟着迷糊,这个问题解决起来也不难。就是采用静态编译就可以了。具体如下:

对于一般的win32控制台程序,可以这样设置:

点击"项目"--- "属性",打开项目属性页,点击 "配置属性"--- "C/C++"--- "代码生成",将此页面右边的 "运行时库"由默认的 "多线程DLL(/MD)"改为 "多线程(/MT)"或 "多线程调试(/MTD)"即可。      
不过一般情况下生成release版本的应用程序时选 "多线程(/MT) "即可,因为这样生成的exe程序较小。      
而如果选了 "多线程调试(/MTD) ",则由于加入了大量的调试信息而使生成的exe程序会增大好几倍。

对于MFC程序,则点击"项目"--- "属性",打开项目属性页,点击 "配置属性"--- "常规",将右边"项目默认值"栏目中的"MFC的使用"改为"在静态库中使用 MFC"。确定后,在"配置属性"--- "C/C++"--- "代码生成"页面的"运行时库"会自动改为静态链接----即"多线程(/MT)"。这样编译出来的程序就可以在没有装VC的机子上运行了。

2.也是很经典的问题---在VC++ 2005中fstream对象无法访问中文路径下的文件,包括英文路径下的中文名文件。

这是VS的一个BUG,原因是本地化的问题,如下处理即可:

在用ifstream和ofstream打开文件前设置全局locale为本地环境,打开文件后再设置回去。

    ofstream writefile;
     string  filename = ( " d:/我的文档/测试.txt " );
    locale loc  =  locale:: global (locale( "" ));  // 要打开的文件路径包含中文,设置全局locale为本地环境
    writefile.open(filename.c_str(),ios:: out ); //打开文件
    locale:: global (loc); // 恢复全局locale

用locale对象的name方法可以看到,通过locale("")构造出的locale对象的name为"Chinese_People's Republic of China.936",而原始的locale对象的name为"C",也就是缺省的ANSI_C公约。

注意:如果使用locale loc = locale::global(locale(""))设置全局locale后没有用 locale::global(loc)恢复的话,那么在程序后面的cout语句就不能输出中文了,虽然这时候操作中文文件没有问题,但是这也是很容易让人掉入陷阱的地方,应该值得注意。

今天就进行这么多了,以后遇到更多的再继续总结了。

VC++2005相关问题解决方案相关推荐

  1. VC++2005 CString和char*的相互转换

    原文:http://laue.cnblogs.com/archive/2005/12/26/305208.aspx 首先声明我不是一个高手,而是一个初学者,文章同样也是一个初学者对于CString和c ...

  2. VC++2005项目的目录结构设置

    2019独角兽企业重金招聘Python工程师标准>>> VC++2005项目的目录结构设置 作者:flyfish 2010-03-23 星期二 为了方便程序的打包和代码转移,需要手动 ...

  3. VC++ 2005 使用BOOST库和WinPcap库

    最近在项目中需要用到C++的Boost库及WinPcap库,Boost库是C++的"准"标准库.WinPcap库则是Windows下的libpcap.用来抓取网络的数据包进行解析. ...

  4. T3升级U8报错相关问题解决方案:

    现有客户数据为T3财务通普及版,使用总账报表:总共有10个帐套数据需要升级到U8 V11.1.(sql 2005) 升级流程:T3普及版升级到T3标准版10.8plus1以上版本→T3系统管理直接输出 ...

  5. 编译安装MySQL5.6失败的相关问题解决方案

    编译安装MySQL5.6失败的相关问题解决方案 参考文章: (1)编译安装MySQL5.6失败的相关问题解决方案 (2)https://www.cnblogs.com/-beyond/p/106680 ...

  6. 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...

    票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案 使用E-Form++源码库开发任何标签,票据,文档,条码 ...

  7. 大量C语言、C++、C#、VC编程相关书籍下载

    大量C语言.C++.C#.VC编程相关书籍下载 http://www.juntuan.net/dh/CYYdowmload.htm C语言 C语言编程宝典大全 C语言实例教程 1.72 C语言程序基础 ...

  8. vc 2005 express使用

    1. vc 2005 express下载 http://msdn.microsoft.com/vstudio/express/visualc/download/ 在线安装包,所依赖的组件可以在线安装: ...

  9. Solidworks 2016安装失败因为VC++2005安装失败的解决办法

    因为Microsoft Visual C++ 2005 Redistributa安装失败,导致Solidworks 2016安装失败的解决办法 同学买了一台3D打印机,便想请他帮忙打印一点东西,来做我 ...

最新文章

  1. linux 编译环境包,linux上war包编译环境搭建(示例代码)
  2. jQuery图片自动轮转动画特效
  3. 一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果
  4. python 爬虫 请求网页内容不一致_Python爬虫偷懒神器 — 快速构造请求头!
  5. element 保存 点击链接_保存微信表情!
  6. [转]淘宝sdk——入门实战之header.php制作(二)
  7. 【下载】跨越鸿沟:颠覆性产品营销圣经-杰弗里·摩尔电子书下载(pdf,epub,mobi,txt)
  8. C4D插件X-Particles粒子特效(六)
  9. 机器学习——Azure机器学习模型在线搭建实验原理+详细操作步骤+分析(以UCI数据库的数据为例)
  10. 【很简单的教程】如何提取模型每层的特征【以ResNet为例】
  11. 计算机设置成一个网络,怎样将笔记本电脑设置成一个wifi热点
  12. Hulu九月热招 | 全职社招
  13. (C++)实现简单分数相加
  14. yagni原则_YAGNI喜欢干吻
  15. 群晖NAS搭建web服务器,并发布公网可访问 2/4
  16. 联想电脑ctrl + r 快捷键无法使用
  17. VScode remote development 远程开发
  18. R6034错误的解决(转)
  19. android微信支付开发过程
  20. 第01章 Spring-Boot 应用文件application配置

热门文章

  1. Android 壁纸应用之动态壁纸
  2. C语言例题:输入三个整数x,y,z,请把这三个数由小到大输出。
  3. TD-SCDMA与TD-LTE的切换
  4. hadoop操作excel表格
  5. [安卓系统导航升级系统,车机升级系统]汽车系统升级更新,诺威达k2201升级包
  6. MSM安装及使用说明
  7. 拉格朗日乘子法及拉格朗日中值定理
  8. linux版笔记本如何装win10,Linux系统的笔记本是什么样的?如何装Win10?这里给你详细解答...
  9. 计算机怎样辅助英语听力教学方法有哪些,一种用于英语听力教学的辅助设备的制作方法...
  10. 与商超便利店巨头内卷“即时零售”