摘要: 3.5.2动态链接库的创建3.5.2.1动态链接库的创建流程动态链接库的创建流程如下图所示:在系统设计阶段,主要的设计内容包括:类结构的设计以及功能类之间的关系,动态链接库的接口。在动态链接库中,包含两类函数:一类是内部函数,一类是外部函数。内部函数只能在动态链接库的内部使用,不能被动态链接库以外的模块调用;外部函数是该动态链接库的接口,可以被外部模块调用。为了使外部函数能够被系统外的模块调用,在进行C++代码编写的时候,必须对外部函数执行导出。导出的级别有两种:函数级别的导出和类级别的导出。在函数级别的导出中,只将该函数导出;在类级别的导出中,将这个类所属的函数和数据导出。在进行导出的时候, 阅读全文
posted @ 2013-07-15 15:56 冷舞 阅读(1286) 评论(2) 推荐(2) 编辑
摘要: 大家好,下面开始静态链接部分的工作原理分析,由于这部分内容太多了,我计划分2个部分发出,先看下这部分的大纲:3静态链接3.1概述编译器的任务是将每一个包含C++代码的源文件编译成包含二进制机器码的目标文件。由于在一个源文件中可能会调用到其它文件中的代码或数据,这些代码或者数据可能来自于静态库中,也可能来自于动态链接库中,也可能来自于其他的源文件中。在编译阶段,编译器只专注于对单个源文件的处理,对于这些外部符号,编译器无法解析。对于调用到外部符号的地方,编译器留出位置,并用一些假数据填充。因此,编译器输出的目标文件是不完整的,是需要修正的。链接器的任务是修正目标文件中不完整的地方,解析在编译阶. 阅读全文
posted @ 2013-07-15 15:33 冷舞 阅读(1685) 评论(2) 推荐(5) 编辑
摘要: 2.1概述在windows操作系统下,可执行文件的存储格式是PE格式;在Linux操作系统下,可执行文件的存储格式的WLF格式。它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的。在windows平台下,目标文件(.obj),静态库文件(.lib)使用COFF格式存储;而可执行文件(.exe),动态链接库文件(.dll)使用PE格式存储。静态库文件其实就是一堆目标文件的集合。在“WinNT.h”头文件中定义了COFF格式文件,以及PE格式文件的数据结构。这些定义是一系列的结构体,枚举,以及#define宏定义。在ImageHlp.dll中定义了编辑和读取PE文件内容的Win32 阅读全文
posted @ 2013-07-12 10:02 冷舞 阅读(4015) 评论(9) 推荐(6) 编辑
摘要: 本文是对C++应用程序在Windows下的编译、链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分。1概述1.1编译工具简介cl.exe是windows平台下的编译器,link.exe是Windows平台下的链接器,C++源代码在使用它们编译、链接后,生成的可执行文件能够在windows操作系统下运行。cl.exe和link.exe集成在Visual Studio中,随着开发工具Visual Studio的安装,它们也被安装到与VC相关的目录下。使用该编译器的方式有两种,一种是在Visual Studio开发环境中,直接点击命令按钮,通过Visual Studio启动编译器;另.. 阅读全文
posted @ 2013-07-11 09:26 冷舞 阅读(4677) 评论(9) 推荐(11) 编辑
摘要: 1 EA的定义Enterprise Architecture,企业架构,简称EA。根据开放群组的业务领导层IT架构指引:“有效的企业架构(Enterprise Architecture,EA)对企业的生存和成功具有决定性的作用,是企业通过IT获得竞争优势的不可缺少的手段。”企业架构是关于业务流程和IT 基础设施的一整套逻辑和结构,它反映了企业经营对集成和标准化的需求。从另一个角度说,企业架构也代表一种去理解、识别和表达上述逻辑和结构的方法和过程。在上述定义中要明确的是,企业(Enterprise)是指由一整套可识别的、互为作用的业务功能构成的(商业)组织,它有能力作为独立实体经营运作。它既可以 阅读全文
posted @ 2013-07-09 15:24 冷舞 阅读(3270) 评论(0) 推荐(1) 编辑
摘要: 4常量的内存分配4.1应用程序的内存结构一个由C++编译的应用程序,占用的内存可以划分为如下几个部分:栈(stack)。由编译器自动分配释放。存放函数参数和函数里的局部变量(又称自动变量)。其操作方式类似于数据结构中的栈。例如,声明在函数中一个局部变量int x; 系统自动在栈中为x分配一块空间,该空间存储x的值。堆(heap)。用于动态内存空间分配。一般由程序员进行分配和释放,若程序员不释放,程序结束时可能由操作系统回收。注意它与数据结构中的堆是两回事,分配方式类似于链表。内存分配在C中使用malloc函数,在C++中用new操作符。以下为C语言小示例:p1 = (char *)malloc 阅读全文
posted @ 2013-07-04 09:33 冷舞 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 1概述一个C++程序就是一系列数据与操作的集合。当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中。当数据与内存发生关联的时候,这些数据就会具有如下的特性:数据在内存中的地址。这个地址决定了数据在内存中的存储位置。在32位的系统中,每一个C++程序都具有4GB大小的内存地址空间,这个4GB大小的内存空间又被划分为若干个区域,如:栈区,堆区,全局(静态)区,文字常量区,以及程序代码区。不同内存地址的数据将会被存储在不同的内存区域中;数据在内存中的值。如果该值可变,那么该数据就是变量;如果该值不可变,那么该数据就是常量;数据的类型。数据的类型决定了数据占用内存的多少。如:Int型 阅读全文
posted @ 2013-07-04 09:31 冷舞 阅读(789) 评论(0) 推荐(0) 编辑
摘要: 2.3全局作用域2.3.1概述全局作用域是最大的名字空间作用域,不同于用户自定义的名字空间作用域,全局作用域不需要显示地定义,它天然存在于C++程序中。全局作用域是一个最外层的容器,是所有作用域的父作用域。在全局作用域中,可以定义其他的名字空间,类型,函数,变量,模版等。在全局作用域中定义的函数是全局函数,在全局作用域中定义的变量是全局对象。全局函数和全局对象在整个全局作用域及其子作用域中有效,它们的生命周期贯穿于整个程序的运行。从定义它们开始直到整个程序运行结束。2.3.2一次定义规则2.3.2.1声明和定义变量可以被声明多次,但只能被定义一次。声明和定义是两个不同的概念。在变量定义的时候, 阅读全文
posted @ 2013-06-26 17:21 冷舞 阅读(1073) 评论(0) 推荐(0) 编辑
摘要: 1概述在所有的计算机程序中,一个基本的目标是操作一些数据,然后获得一些结果。为了操作这些数据,需要为这些数据分配一段内存,我们可以将这段内存称为变量。为了方便操作,以及程序可读性方面的考虑,需要使用一个有意义的名称来引用这段内存,这个名称就是变量名。将名称和一段内存关联起来的工作可以分成两个阶段来进行,分别是变量的声明和定义。在变量声明的时候,只是引入了一个名称,该名称并没有和一段特定的内存关联。也就是说,在声明变量的时候,只是引入了一个助记符,并没有执行内存分配。在定义变量的时候,将前面声明过程中引入的名称关联到了一段特定的内存,内存的大小由变量的类型决定。也就是说,在定义变量的时候,真正执 阅读全文
posted @ 2013-06-26 17:15 冷舞 阅读(7451) 评论(0) 推荐(5) 编辑
摘要: 转眼间,我已经工作6年了。做项目经理也大约做了5年,在这5年里,我积累了大量的项目管理经验,同时学习了很多项目管理方面的理论知识。 最近,我觉得我有必要将我的项目管理知识体系做一下整理。在随后的一段时间里,我将会在我的博客上发表一系列有关项目管理方面的文章。 读了很多书,吸取了很多前辈们总结的经验,因此,才会有我的这一系列的文章。在这里对前辈们表示感谢。同时,我也很高兴能够将我的所学拿到这里与大家... 阅读全文
posted @ 2009-05-08 22:17 冷舞 阅读(1911) 评论(16) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2019-07-11 06:24 冷舞 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 1 概述1.1 HTTPS 使用SSL协议,对HTTP协议通信过程中的明文数据加密,这就是HTTPS。网络分层结构如下: SSL协议负责数据加密,解密,位于HTPP协议和TCP协议之间。 客户端和服务器端使用HTTPS通信的时候,分为两个阶段:SSL握手阶段和HTTPS正式通信阶段。1.2 对称加密 阅读全文
posted @ 2019-07-09 18:03 冷舞 阅读(515) 评论(0) 推荐(0) 编辑
摘要: 1概述1.1应用架构 mybatis框架用于支持对关系数据库的操作,该体系的应用架构如下图所示: 在mybatis框架体系中,主要的组件是:SqlSessionFactoryBean和MapperScannerConfigurer。SqlSessionFactoryBean类依赖外部注入的数据源:D 阅读全文
posted @ 2019-07-08 20:27 冷舞 阅读(25787) 评论(0) 推荐(3) 编辑
摘要: 4动态链接4.1概述在静态链接阶段,链接器为PE文件生成了导入表,导出表,符号表,并调整了Call指令后面的操作数,在程序调用的时候,能够直接地或者间接地定位到IAT中的某个位置,在PE文件中,该位置包含符号的名称,当PE文件加载到内存以后,该位置应该修正为符号的地址。这些已有的信息和已经完成的工作是后续动态链接的基础。动态链接的任务是:在程序的加载或者运行阶段,执行各个模块的基址重定位工作,并将IAT中的符号名称修正为动态链接库中被调用的符号的地址。动态链接分为隐式动态链接和显式动态链接,无论是隐式动态链接还是显式动态链接,都会涉及到对WindowsAPI函数:LoadLibrary(),G 阅读全文
posted @ 2013-07-18 11:28 冷舞 阅读(1791) 评论(3) 推荐(3) 编辑