摘要: "No-one normally bothers to understand what is that is does exactly, until strange or funny things start happening. " DllMain我们都不会陌生,让我们先看看MS怎么说的MSDN。 哦,仅仅如此么?《Windows核心编程(第5版)》有比较稍微详细的介绍,我整理了下: 根据fdwReason参数,有四种情况DllMain函数会被调用。1.DLL_PROCESS_ATTACH: 系统第一次将一个DLL映射到进程地址空间时。执行进程相关的初始化工作。 每个DL 阅读全文
posted @ 2011-04-12 15:59 nickolas 阅读(1171) 评论(0) 推荐(0) 编辑
摘要: Application Specific Paths for DLL LoadingConfiguring workstations to handle shared DLLs is difficult. In many organizations, the PATH environment becomes a point of contention between project teams. Configuring a PATH specific to your application can solve the problems associated with using a commo 阅读全文
posted @ 2011-04-11 16:49 nickolas 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 1.链接过程:程序加载->重定位->符号解析2.连接器输入:目标文件、库、命令文件连接器输出:可执行文件、加载映射信息、调试器符号3.obj文件结构:段(segments)、符号表(symbol table)链接器第一遍扫描obj文件,创建一个列出输入文件中的所有段的段表和包含所有导入导出符号的符号表。确定输出文件布局。第二遍扫描负责重定位,和动态链接时,运行时链接器解析动态符号所需信息。当链接器处理完所有obj文件之后,如果还存在未解析的improted name他就会查找库,将输出这些未解析名字的库连接起来。(静态链接) 阅读全文
posted @ 2011-04-10 16:48 nickolas 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 问题1——环境设置问题1.确认是在debug模式下运行2.确认正确的项目设置:链接器->调试->生成调试信息(是), C++->常规->调试信息格式(/Zi or /Z7)问题2——当前代码与当前执行的程序不匹配1.确认运行的是最新生成的代码:不是在运行中编辑的2.当进行dll调试的时候确保加载的是代码对应的dll,可以通过设置项目依赖项或自定义生成避免这个问题如果上面的都没有问题,尝试重新启动VS 阅读全文
posted @ 2011-04-07 17:36 nickolas 阅读(10829) 评论(0) 推荐(0) 编辑
摘要: 面向对象五大原则即SOLID,是类设计的最基本原则,可以说是面向对象的基础,了解OOP的程序员应该很熟悉这些原则http://www.cnblogs.com/tqsummer/archive/2010/07/11/1775205.htmlSRP:Single Responsibility Principle, 单一职责原则http://blog.csdn.net/sghys/archive/2008/03/20/2199270.aspxOCP:Open Close Principle ,开闭原则http://blog.csdn.net/sghys/archive/2008/03/20/2199 阅读全文
posted @ 2011-04-06 13:30 nickolas 阅读(806) 评论(0) 推荐(0) 编辑
摘要: 1.分析问题 首先分析模块输入、输出,可以画流程图、类结构图帮助理解程序结构。2.分析问题 是的,还是分析问题。当设计的模块需要几天,甚至几周的模块,最好出去转转换个脑子,最先想到的办法通常不是最好的,另外以前的经验也往往让我们错误的估计问题。3.测试结论 当我们有了一个思路,我们不是马上实现它,而是先验证它是否真的管用。这个过程中会对问题有更深的认识,那么,修改前面的结论吧。4.重构 我们对问题有了比较清晰的理解,对现有的模块也有了一个可以工作的方案。那么着手修改已有的代码吧,先保持原有的功能不变,让已有的代码能够符合我们新的功能,结构。修改之前一定备份已有的代码。5.测试现有功能 已有的代 阅读全文
posted @ 2011-04-03 15:18 nickolas 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 1. 严援朝 所属公司:新浪网 入选理由:开发第一个中文操作系统CCDOS,参与创办四通利方,掌控最大的中文网站新浪网技术总架构。 “做软件就是在不断地明确目标,就是搞清楚你的GO 是什么,所有的软件都逃不出那三句话——IF、THEN、 ELSE。棒的程序员很快能够知道自己的GO是什么,没长进的程序员老也弄不清楚自己到底要干嘛,所以永远处在 学习过程中,手里永远拿着一本书,永远在学,永远也学不会。”这是严援朝很经典的一句话,甚至有程序员把这作为自己的座右铭。作为中国第一代程序员的象征,他如今依然负责在新浪网的整体技术架构上。不知是不是严援朝怕别人忘记自己,不久前,从新浪网炮制出了两篇文章,大谈 阅读全文
posted @ 2011-03-25 14:43 nickolas 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 转载自http://hi.baidu.com/xin_jing/home一、 static 变量static变量大致分为三种用法1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.2. 用于全局变量,主要作用是限制此全局变量被其他的文件调用.3. 用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象1. 静态局部变量静态局部变量属于静态存储方式,它具有以下特点:(1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。(2)允许对 阅读全文
posted @ 2011-03-25 14:19 nickolas 阅读(2041) 评论(0) 推荐(0) 编辑
摘要: 如果C++程序在链接时,不能在所有的库和目标文件内找到所引用的函数、变量或标识符,将产生此错误。一般来说,发生错误的原因是所引用的函数、变量不存在、拼写不正确或者使用错误。下面,我以工程内链接和连接库链接两种方式讨论错误出现的原因和解决错误的方法。一,工程内链接1,工程内函数或变量不存在 1,只声明没定义。 2,声明和定义的函数参数列表不一致。 3,函数或变量拼写错误。2,函数或变量所在的文件没有被正确编译 1,所在的文件没有被添加到工程中。 2,函数或变量的定义放在头文件,但是该头文件并没有被任何一个cpp文件引用,注意:这种情况只会出现入口函数的链接错误。 4,预处理宏或条件编译导致函数或 阅读全文
posted @ 2011-03-24 18:05 nickolas 阅读(3513) 评论(4) 推荐(0) 编辑
摘要: 隐式类型转换是C++一个很不安全的特性,经常给调试程序制造麻烦.一个避免int和指针间隐式类型转换的技巧是使用const int, 因为没有pointer 到 const int 的implicit cast ,当然经常需要配合使用const_cast<T>()和multiable. 阅读全文
posted @ 2011-03-11 16:20 nickolas 阅读(446) 评论(0) 推荐(0) 编辑