摘要:很多软件通过设置自己的异常捕获函数,捕获未处理的异常,生成报告或者日志(例如生成mini-dump文件),达到Release版本下追踪Bug的目的。但是,到了VS2005(即VC8),Microsoft对CRT(C运行时库)的一些与安全相关的代码做了些改动,典型的,例如增加了对缓冲溢出的检查。新CRT版本在出现错误时强制把异常抛给默认的调试器(如果没有配置的话,默认是Dr.Watson),而不再通知应用程序设置的异常捕获函数,这种行为主要在以下三种情况出现。(1)调用abort函数,并且设置了_CALL_REPORTFAULT选项(这个选项在Release版本是默认设置的)。(2)启用了运行时
阅读全文
随笔分类 - VC/MFC
摘要:前言:利用drwtsn32或NTSD进行程序崩溃处理,都可以生成可用于调试的dmp格式文件。使用VS2005打开生成的DMP文件,能很方便的找出BUG所在位置。本文将讨论以下内容:1、程序编译选项2、利用VS2005分析dump文件3、常见问题讨论一、程序编译选项PDB files contains all debug information like type definition and function prototype.When application crashes, we need the PDB files to analyze the root cause, so make
阅读全文
摘要:.pdb文件,是VS生成的用于调试的符号文件(program database),保存着调试的信息。在VS的工程属性,C/C++,调试信息格式,设置/Zi,那么VS就会在构建项目时创建PDB文件。在这里要区分两种情况:1、构建静态库时,可以在工程属性 –> C/C++ –> 输出文件–>程序数据库名 设置生成的pdb文件名称,如果不指定,默认是生成为VCx0.pdb,这里x是VS版本号,例如用VS2005,就会生成VC80.pdb。这里就会产生一个疑问,编译静态库时默认生成的.pdb文件名字都一样,那引用这个静态库的项目最后能找到正确的.pdb文件吗?答案是肯定的,因为VS会
阅读全文
摘要:当应用程序被链接以后,代码被逐一地翻译为一个个的地址,优化以后的代码可能初看起来更是面目全非。每当我们使用vs或者windbg等微软的调试工具进行调试的时候,我们可以方便地使用变量名来查看内存、可以使用函数名称来下断点、甚至可以指定某个文件的某一行来下断点。这一切背后是什么在指导调试器工作呢?答案就是符号——pdb或者dbg文件(.NET自己有元数据,符号不需要元数据已有的信息)。 程序运行的时候,计算机只需要逐条执行指令即可。而与源代码对应的关系是完全不需要知道的。这就给调试带来了困难,所以无论什么编译都有自己的一套用于对应代码和可执行程序。各种编译器都有自己保存类似这种对应关系的办法,有.
阅读全文
摘要:There are several reasons for xcopy deployment of an application (also known as application local). One main reason is that you are independent of what the target computer has installed.Also your application always uses the “correct” (or better: tested) version of DLLs, regardless of what MS install
阅读全文
摘要:If you create a default CRT/MFC application with VS2008, this application will not run on other computers. You application will complain with“This application has failed to start because the application configuration is incorrect”.The problem is that by default VC2008 uses the DLL-version of the CRT
阅读全文
摘要:前一种方法是将manifest文件放入exe中,但是要记得需要在工程中设置 这样的话exe中就不存在manifest了,在debug目录下就会看到相应的manifest文件。后者是将exe中的manifest文件提取出来,但是exe中依然有manifest文件!
阅读全文
摘要:Agg vs. Cairo 二维绘图引擎之比较和选择 cheungmine当今时代对于作为二维图形软件开发者, 是幸运的。因为除了Windows GDI/GDI+之外,我们还有很多其他的选择。而且这些选择除了能跨平台之外,性能上与原始GDI/GDI+相比,都不逊色。如果不考虑绘图的效果,使用Win32 GDI函数直接绘图的效率大约是同样的GDI Plus的10倍以上。为了反走样的美观,只有牺牲效率了。老式的程序还在使用GDI绘图,不是这些程序不想提升到GDI+,可能这样改动的代码量太大,所谓船大不好掉头所致。因此,后发的优势就是可以利用当今软件发展的最新成果,快速切入一个领域,所谓迎头赶上。言
阅读全文
摘要:双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后希望在这个窗口中绘制我们的图像、图形等数据,然而ATL向导生成的代码中包含很多错误,下面是其自动向导生成的代码: HRESULT OnDraw(ATL_DRAWINFO& di) { RECT& rc = *(RECT*)di.prcBounds; // 将剪辑区域设置为 di.prcBounds 指定的矩形 HRGN hRgnOld = NULL; if (GetClipRgn(
阅读全文
摘要:在COM组件中调用JavaScript函数要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS)调用A的方法longCalc(),该方法是一个耗时的操作,要求通知IE当前的进度。这就要求使用回调函数,设其名称为scriptCallbackFunc。实现这个技术很简单:1 组件方(C++)组件A 的方法在IDL中定义:[id(2)] HRESULT longCalc([in] DOUBLE v1, [in] DOUBLE v2, [in, optional] VARIANT scriptCallback);组件A的方法实现:// 假设回调原型为:// scriptCall
阅读全文
摘要:dumpbin用法:dumpbin /exports /out:d:\mfc90.txt d:\mfc90.lib在使用VC时,可以用DUMPBIN。EXE来得到某个DLL中所输出的符号的清单。如下面的命令:dumpbin -exports Cmpnt1.dll如:C:\WINDOWS\system32>dumpbin -exports msgsvc.dllMicrosoft (R) COFF Binary File Dumper Version 6.00.8447Copyright (C) Microsoft Corp 1992-1998. All rights reserved.Du
阅读全文
摘要:环境:VS2008 + CxImagebtn.h[cpp]view plaincopyprint? #pragmaonce//CBtn#include"ximage/ximage.h"classCBtn:publicCButton{DECLARE_DYNAMIC(CBtn)private:CxImage*m_pImgNormal;CxImage*m_pImgOver;CxImage*m_pImgDown;CxImage*m_pImgFocus;CxImage*m_pImgDisable;BOOLm_bTracking;BOOLm_bMouseOver;BOOLm_bLBtn
阅读全文
摘要:Every version of Visual Studio comes with certain versions of the Microsoft libraries, such as the C runtime library, the MFC library, and so on. For example, Visual Studio 2008 comes with version 9.0.21022.8 of the Microsoft C runtime library and version 9.0.21022.8 of the MFC library. You can easi
阅读全文
摘要:vc2008程序发布指南2008-05-03 17:46vc2008开发的程序的发布方式可以有5种方式:1. 采用静态链接到crt和MFC. 只要你拥有组成程序的所有源代码,你就可以采用这种方式, 这种方式除了程序变大一点,好处多多: 1) 不必重新发布vc2008基础库vcredist_x86.exe(安装到WinSxS). 2) 不必产生,嵌入manifest. 3) 也不把vc2008基础库放在程序所在目录.2. exe(嵌入manifest) + vcredist_x86.exe 确保程序正确产生并嵌入manifest文件,然后把程序和vcredist_x86.exe一起发布.用户先安
阅读全文
摘要:恩,为了大家都能很方便的理解,我将尽量简单通俗地进行描述。[现象]对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把此exe文件拷贝到别人电脑上时,便不能运行了,大致的错误提示如下:应用程序配置不正确,请重新安装程序……或者是MSVCR80D.dll 没有找到什么的(我记得不是很清楚,不过大致是这样的)[分析]看到这样的提示,当然不会傻到重装咯。第一反应应该是什么配置有问题、或者是缺少了什么依赖的库文件;于是我就根据以前Windows缺少库文件的经验,把所有库文件(××.DLL)统统一股脑地复
阅读全文
摘要:Side-by-sidetechnology is a standard forexecutable filesinWindows 98 Second Edition,Windows 2000, and later versions of Windows that attempts to alleviate problems that arise from the use ofdynamic-link librariesin Microsoft Windows. Such problems include version conflicts, missing DLLs, duplicate D
阅读全文
摘要:本文简要介绍Side-by-side assembly技术,探讨在插件技术中使用类似方法的可能。什么是Side-ty-side AssemblySide-by-side assembly是Windows Xp及以上系统解决动态链接库版本冲突所使用的技术,要点是编译程序时,由Visual Studio生成一个manifest文件,指明本应程序所使用的动态链接库的版本;发布程序时也要发布该manifest文件,供客户计算机上的dll loader根据manifest加载适当版本的dll,如果不发布该项manifest,客户机按默认版本加载Dll。Representation of typical
阅读全文
摘要:什么是Side-by-Side Assembly?Side-by-Side Assembly(建称SxS)是微软在Visual Studio 2005(Windows 2000?)中引入的技术,用来解决Windows平台上的DLL Hell问题。DLL Hell的介绍可以看Wikipedia的文章。简单的说,DLL Hell窘境包括了Windows应用程序依赖的DLL带来的若干问题,包括同名DLL、DLL升级、DLL载入顺序等等。Side-by-Side Assembly按照我的理解,是一种特殊的DLL,按照Side-by-Side Assembly的要求开发的,并用XML格式的manifes
阅读全文
摘要:一、问题编译某个遗留工程后,运行程序时报错,“由于应用程序的配置不正确,应用程序无法启动。重新安装应用程序可能会解决这个问题。”查看生成的Manifest文件如下: 问题出现在第三个assemblyIdentity中version的值与机器上该dll的值不符。二、解决方法需要将manifest中第三个assemblyIdentity中version的值修改为与机器上相应dll的版本。查看该项目的属性发现,【连接器】->【清单文件】->【生成清单】项的值为“是”。由此可见,该manifest...
阅读全文
摘要:什么是vs 程序的manifest文件manifest 是VS程序用来标明所依赖的side-by-side组建,如ATL, CRT等的清单。为什么要有manifest文件一台pc上,用一组建往往会有不止一个版本(c:/windows/winsxs或系统目录下),程序在加载的时候,不知加载哪个,于是manifest文件来指明。manifest在哪儿,如何创建。如果用VS开发,可以Set通过porperty->configuration properties->linker->manifest file->Generate manifest To Yes来自动创建manif
阅读全文