-
最新日志
标签
分类
-
博客统计
- 6,839 点击
功能
存档页
- 2012年01月
- 2011年12月
- 2011年10月
- 2011年06月
- 2011年04月
- 2011年02月
- 2011年01月
- 2010年12月
- 2010年11月
- 2010年10月
- 2010年09月
- 2010年08月
- 2010年07月
- 2010年06月
- 2010年05月
- 2010年04月
- 2010年03月
- 2010年02月
- 2010年01月
- 2009年12月
- 2009年11月
- 2009年10月
- 2009年09月
- 2009年08月
- 2009年07月
- 2009年06月
- 2009年05月
- 2009年04月
- 2009年03月
- 2009年02月
- 2009年01月
- 2008年12月
- 2008年11月
- 2008年10月
- 2008年09月
- 2008年08月
- 2008年07月
- 2008年06月
- 2008年05月
- 2008年04月
- 2008年03月
- 2008年02月
- 2008年01月
- 2007年12月
- 2007年11月
- 2007年10月
- 2007年09月
- 2007年08月
- 2007年07月
- 2007年06月
- 2007年05月
- 2007年03月
- 2007年01月
- 2006年12月
- 2006年11月
- 2006年10月
- 2006年09月
- 2006年08月
- 2006年07月
- 2006年06月
- 2006年05月
- 2006年04月
- 2006年03月
- 2006年02月
- 2006年01月
- 2005年12月
- 2005年11月
- 2005年10月
- 2005年09月
Tag Archives: VC
KB2465361 导致静态链接 MFC 库的应用程序文件增大
摘要翻译自:Static MFC code bloat problem from VC2010 is now in VC2008 SP1+security fix 大致原因:themehelper.cpp 使用了 afxglobals.cpp 中的内联方法 AfxLoadSystemLibraryUsingFullPath,而 afxglobals.obj 会带来其它一堆跟班,然后最终的输出文件就无形中自我膨胀了。。。 解决方法:在 stdafx.cpp 中的 #include “stdafx.h” 之后加入如下代码,其实也就是把 MFC 中的方法复制一份出来,然后重新编译程序吧~ HMODULE AfxLoadSystemLibraryUsingFullPath(const WCHAR *pszLibrary) { WCHAR wszLoadPath[MAX_PATH+1]; if (::GetSystemDirectoryW(wszLoadPath, _countof(wszLoadPath)) == 0) … 繼續閱讀
Windows XP 上运行 Angry Birds/愤怒的小鸟
游戏发布后随即在自己用的 Win7 本本装上了,可以正常运行,但回到家里想给爸妈用的 XP 本本也装一个,却总是启动失败,提示说“由于应用程序配置不正确,应用程序未能启动…”(对应的英文是:”This application has failed to start because application configuration is incorrect. reinstalling the app may fix this problem.”,可用于搜索英文网页),当时更新了 DirectX 运行库,也安装了最新的 VC9 运行库,却仍旧不行,只好先放下。 然后今天继续研究,用 Dependency Walker 检查过执行程序,似乎说是找不到 MSVCR90.DLL(另外报的 WER.DLL 等两个应该属于误报),于是很疯狂地先后安装了 6 个版本的 VC 运行库(四个是 VC9 的,另外 VC8 … 繼續閱讀
VC9 开发的程序不用 Unicode 库就没有 XP 风格
才写了一个星期的小软件,最近突然发现没有 XP 风格了,折腾了十来分钟才发现是因为项目没有采用默认的 Unicode 字符集,而前几天作出这个决定是因为软件依赖的第三方类库提供的接口不是 Unicode 的,参数转换来转换去的实在有点麻烦。。。 关于这个问题,这里有一个比较详细的说明及解决方法:使程序界面具有XP风格(在VS2003和VS2005中),补充一点,VC9 里不需要编辑 *.rc2 文件,直接将 manifest 文件加入到项目里就可以了。
开发相关网文存档
主要最近几个月读过的一些,留个印记,方便以后查找。 首先是一个关于 C++ 0x 标准中部分新增特性的系列文章,有点意思,不过从右值引用开始看得我相当累。。。基本功太差啦:( C++0x Features in VC10, Part 1(译文) C++0x Features in VC10, Part 2(译文1、译文2、译文3) C++0x Features in VC10, Part 3(译文) 然后是 Joel 搞的一个 Hg 入门教程,简洁明了,也挺有意思,以后有空可以尝试一下这类分布式 VCS:) Mercurial 入门教程 再然后是一篇批评 ACE 的文章(一个只能用来学习的类库有啥用?),但感觉对于其中大部分观点,作者似乎多以揣测为主(也可能只因为这不是他想要的东西),我自己比较同意的主要是:学习曲线比较陡峭(对于没啥网络编程经验的,比如我),特定应用场合下很可能需要对类库进行适当的定制(反正一般场合用用应该是足够了)。另外,因为以前提到过的一个问题,感觉这个项目现在比较官僚,稍显活力不足。。。所以,以后有空也是可以试试其它一些网络库的,比如 Boost 里的 Asio。 学之者生,用之者死——ACE历史与简评 再再然后是前几天在水木的 VC … 繼續閱讀
“由于应用程序配置不正确,应用程序未能启动”
主要针对 VC9 编译出来的程序,这个问题我曾经以为在《VC2005 的程序文件分发问题及解决》里已经搞清楚了:( 1. 到目前为止,我机器上的 VC9 运行库版本有三个:21022.8(对应 RTM)、30729.1(对应 SP1)、30729.4148(对应 ATL 更新),其中 WinSXS 目录下三个版本都有,而 VC9 安装目录下只有最新的 30729.4148 版本。 2. 默认情况下,VC9 编译出来的程序,内含的 manifest 文件中指定的是 21022.8 版本,这个与 VC8 的默认处理是不一样的(绑定最新版本),主要目的是防止用户只更新程序文件而不更新运行库导致程序无法运行的情况。 3. 那如果机器里只安装了最新版本的 vcredist_x86.exe 呢?没关系,安装包会生成相应的 policy 文件,尽管程序要求的是 21022.8 版本,也会重定向到最新的版本比如 30729.4148 上,嗯,灵活性不错。 4. 如果在 VC9 … 繼續閱讀
VS 2008 笔记
1. 老版本附带的 Dependency Walker 找不到了,上网一查,原来已经自立门户,这样也好。 2. 基于对话框的 MFC 应用,Release 时选择静态链接 MFC 库,结果文件硕大无比,再上网一查,原来主要是因为使用了那堆新加入的 …Ex 类库,然后特意跑到 Win7 下看了看效果,貌似也没啥不同,还是倒回非 …Ex 类库吧,果然小了不少:) 3. 据说 Win7 快成主流了(可怜我的本本还是跑不太动),所以这一条是 UAC 相关的,如果需要在程序启动时请求管理员权限啥的,可以在项目属性里进行设置(Linker –> Manifest File –> UAC Execution Level),前提是 UAC 没禁用。但现在还不清楚如何通过配置啥的来让程序自动获取管理员权限(允许第一次运行的时候让用户确认一下)。 4. 基于对话框的 MFC 应用,设置消息处理和重载父类方法的地方(原来 VC6 中的 Class … 繼續閱讀
Package Load Failure
最近刚装的 VS2008,在编辑 MFC 应用程序的对话框资源时会报这个错: 网上能搜索到不少关于 package load failure 的问题解答,但大都和我的问题不相干,后来才终于找到一篇墙外的文章,原来是要安装 VS2K8 的时候把 Visual Web Developer 也选上才行,我本来就只装了一个 VC:( 然后想看看能不能直接补装,结果不管从光盘还是从控制面板,都会不同程度地出问题报错,最后只好全部卸载了重装,话说现在装 SP1 及之后的几个补丁真是慢啊,而且还巨耗空间。。。
VC2005 的程序文件分发问题及解决
参考:http://blog.csdn.net/liguangyi/archive/2006/06/01/767396.aspx 但我这边 Debug 版本还有问题,装了 vcredist_x86.exe 也跑不起来,用 Dependency Walker 看依赖的 dll 似乎也不缺,奇怪。 Update @ 09/03/31: vcredist_x86.exe 中只包含 Release 版本的运行库,Debug 版本的话,将 Microsoft Visual Studio 8VCredistDebug_NonRedistx86 下的 Microsoft.VC80.DebugCRT 等目录根据需要复制到应用程序所在路径就可以了,相类似的,Release 版本也可以通过这种复制整个运行库目录到应用程序所在路径的方法来搞定。
成都出差纪要
后天终于可以回上海,很久没有出这么长时间的差了,应该小小地总结一下:) 身体状况: 刚来时轻微牙疼,等牙不疼了就开始轻度感冒加口腔溃疡,再然后感冒好了溃疡消了居然再度开始中度牙疼,只有这个星期到目前为止一切正常,听说成都是个养人的地方… 工作上的收获: 开始使用SVN来代替CVS,对Console程序、C/C++的部分基本语言特性、ADO以及在VC中使用ADO了解均有所增强,其实貌似还是基本功太差… 比较失望的和比较惊喜的: 成都的火锅,貌似说好的人不少。两次都吃的同一个地方,应该不算差,但也没什么特别的感觉,吃火锅的地方到了晚上就有节目看,略去大部分比较无聊的节目,生平第一次亲眼看了著名的川剧绝活--“变脸”! 失败: 呆在成都将近一月,除了工作地和住处,传说中值得玩玩的地方一个也没去(从门口十米以外经过武候祠应该不算吧),每天基本两点一曲线,而且,不是:)是:(… 教训: 在将来路不明的网线插入网卡前,最好还是检查一下其头部的身体状况,得到这个教训的代价是一台机器的集成网卡阵亡,另一块重伤… 最郁闷的: 辛辛苦苦带来的三台机器有两台就没怎么用过,还得花不少钱把它们给运回去:( 最漫长的下午: 自然是今天下午的会….
[整理] 用VC++通过Automation操作Excel表
0. 本文针对VC++ 6.0和Excel 2003的组合,其它版本应该类似。 1. Office Automation Using Visual C++ 微软KB中的一篇总括性的文章,对VC++中使用Automation的几种方法及一些相关问题进行了说明,其中也链接了一些实际操作的代码,如数据的批量导入导出等,都是针对使用MFC的方法,而下面这篇对于了解一些背后的原理会有所帮助: How To Automate Excel From C++ Without Using MFC or #import 2. 相关的VBA文档,比如对象、方法及常量等的定义,可以查看Office安装目录下的“OFFICE112052VBAXL10.CHM”,如果找不到,运行Office的安装程序,选择应用程序的高级自定义,将Office共享功能中的Visual Basic for Applications及其帮助都选上就有了。 3. 生成Excel表时,如果要设置单元格的样式为文本,可以调用Range对象的SetNumberFormatLocal方法,参数是COleVariant(“@”),这个地方折腾了我不少时间,起先总以为是设置Style什么的,好一会也没弄明白,后来是利用Excel的宏功能,将设置单元格样式的操作记录成VBA程序,才得到如上的方法,其它类似问题应该也可以类似处理。 4. 关于Excel表中有数据的单元格范围,可以对一个已打开的Range对象调用GetCurrentRegion方法来得到。 5. 用完后(包括碰到异常)别忘记调用_Application的Quit方法,不然进程列表中要有一堆EXCEL.EXE了:) x. 天真是冷啊,打字困难ing…考虑开空调了。