摘要: 【转自】http://blog.csdn.net/do2jiang/archive/2009/10/17/4690967.aspx在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。一早期的内存分配机制在 早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算 机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存 的呢?下面通过实例来说明当时的内存分配方法:某 阅读全文
posted @ 2012-04-24 11:25 书中翱翔 阅读(226) 评论(0) 推荐(0) 编辑
摘要: Delphi通过向导可以非常迅速和方便的直接建立实现COM对象的代码,但是整个COM实现的过程被完全的封装,甚至没有VCL那么结构清晰可见。一个没有C++下COM开发经验甚至没有接触过COM开发的Delphi程序员,也能够很容易的按照教程设计一个接口,但是,恐怕深入一想,连生成的代码代表何种意义,哪些能够定制都不清楚。前几期 “DELPHI下的COM编程技术”一文已经初步介绍了COM的一些基本概念,我则想谈一些个人的理解,希望能给对Delphi下COM编程有疑惑的朋友带来帮助。 COM (组件对象模型 Component Object Model)是一个很庞大的体系。简单来说,COM定义... 阅读全文
posted @ 2012-04-16 14:05 书中翱翔 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 要在服务器中加入COM对象,可以使用“File”菜单上的“New”命令,翻到“ActiveX"页,然后双击“COM Object”图标,Delphi将启动COM对象向导.这里说的COM对象是非常简单的。如果要创建特定形式的COM对象,诸如OLEAutomation对象或者ActiveX件.则必须使用Delphi提供的专门向导。具体方法如下: 1、在“Class Name”框内输入C0M对象的类名,不必以T打头。 2、在“Instancing”框内指定COM对象的实例模式。对于In_Process类型的服务器来说不必指定实例模式。 3、在“Threading Model"框内 阅读全文
posted @ 2012-04-16 13:03 书中翱翔 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 认识GUID、CLSID、IID 在一个复杂的系统中,可能充斥着大量的组件对象.每个组件对象可能又有大量的接口,为了保证这些接口彼此不会冲突,Microsoft规定用GUID来标识组件对象和接口。GUID是Globally Unique Identifier的缩写.意为全局唯一标旧符.GUID可以标识组件对象的类,这时候GUID也称为CLSID(Class Identifier的缩写)。GUID也可以标识组件对象的接口,这时候GUID也称为IID(Interface Identifier的缩写)。在delphi中,可以用Ctrl + Shift + G生成GUID。引用计数 引用计数是一种.. 阅读全文
posted @ 2012-04-16 11:52 书中翱翔 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 组件对象模型(Component Object Model,以下简称COM)是组件对象之间相互接口的规范,凡是遵循COM接口规范的对象彼此之间能相互通信和交互,即使这些对象是由不同的厂商、用不同的语言、在不同的Windows版本甚至不同的机器上编写和建立的。 Delphi支持COM接口规范,Object Pascal语言增加了对象接口的方法。用Delphi创建的COM对象还可以工作在MTS(Microsoft Transaction Server)环境中。 软件重用是业界追求的目标,人们一直希望能够像搭积木一样随意“装配”应用程序,组件对象就充当了积木的角色。所谓组件对象,实际上就是预... 阅读全文
posted @ 2012-04-16 11:35 书中翱翔 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 问题来源: stdcall类型函数调用,参数倒序入栈,第一个参数最后入栈,函数内部访问第一个参数时经常看到用[ebp + $08]表示,ebp通常来自esp,即函数首部经常看到的push ebp, mov ebp, esp,为什么栈顶偏移$08才是第一个参数呢?按道理说第一个参数最后入栈,栈顶不应该就是第一个参数么?事实并非如此...问题探索与解答: 函数1:1 function add:Integer;stdcall;2 begin3 Result :=10;4 end;调用该函数,观察汇编代码:(注意EIP寄存器变化)0044D944 E8F3FFFFFF call a... 阅读全文
posted @ 2012-02-20 10:46 书中翱翔 阅读(1647) 评论(0) 推荐(0) 编辑
摘要: 中断描述符表(Interrupt Descriptor Table,IDT)将每个异常或中断向量分别与它们的处理过程联系起来。与GDT和LDT表类似,IDT也是由8字节长描述符组成的一个数组。与GDT不同的是,表中第1项可以包含描述符。为了构成IDT表中的一个索引值,处理器把异常或中断的向量号乘以8。因为最多只有256个中断或异常向量,所以IDT无需包含多于256个描述符。IDT中可以含有少于256个描述符,因为只有可能发生的异常或中断才需要描述符。不过IDT中所有空描述符项应该设置其存在位(标志)为0。IDT表可以驻留在线性地址空间的任何地方,处理器使用IDTR寄存器来定位IDT表的位置。. 阅读全文
posted @ 2012-02-14 13:11 书中翱翔 阅读(823) 评论(0) 推荐(0) 编辑