自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(126)
  • 收藏
  • 关注

转载 11 线性表06

//函数功能: 删除元素//初始条件: 顺序线性表L已存在, i>=1 && i<ListLength(L)//操作结果: 在L中删除第i个元素并用e返回其值Status ListDelete(LinkList *L, int i, ElemType *e){ int j; LinkList p,q; p = ...

2018-11-04 20:55:00 139

转载 10 线性表05

#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20typedef int ElemType;typedef int Status;typedef struct Node{ ElemType data; struct Node* ...

2018-11-04 20:45:00 175

转载 09 线性表04

//函数功能: 获取线性表元素的值//初始条件: 顺序线性表L已存在,1 <= i <= ListLength(L)//操作结果: 用e返回L中第i个数据元素的值Status GetElem(SqList L, int i, ElemType *e){ if(L.length == 0 || i < 1 || i > L.length)...

2018-11-04 20:40:00 157

转载 07线性表02

//La表示a集合 Lb表示b集合void unioL(List *La,List Lb){ int LaLen,LbLen,i; ElemType e; LaLen = ListLength(*La); LbLen = ListLength(*Lb); for(i = 1; i <= LbLen...

2018-11-04 20:08:00 714

转载 022Linq详解

事件的声明完整声明using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApp2{ class Program { ...

2018-11-03 21:05:00 79

转载 021事件详解

事件的应用实例演示派生(继承)与扩展(extends)事件模型的五个组成部分1.事件的拥有者(event source,对象)T周2.事件成员(event,成员)3.事件的响应者(event subscriber,对象)4.事件处理器(event handler,成员)——本质上是一个回调方法5.事件订阅——把事件处理器与事件关...

2018-11-02 20:36:00 204

转载 019 委托

实例:C/C++中的函数指针#include <stdio.h>#include <stdlib.h>typedef int(*Calc)(int a, int b);int Add(int a, int b){ return a+b;}int Sub(int a, int b){ return ...

2018-11-01 15:10:00 102

转载 5.3 动态链接库:DLL

5.3.1丢失的DlIMain()  使用过C语言或者汇编语言的DLL开发者都清楚地知道:DLL应该从一个名为D11Main()的例程开始编写,而编译器也会使D11Main()成为DLL载入时的入口。以Delphi方式描述的例程声明如下:function D1lMain(hinstDLL:DWORD;fdwReason:DWORD;pVReserved:Pointer):BO...

2018-11-01 10:32:00 266

转载 5.2 32位的DOS:控制台应用程序

5.2.1控制台应用程序的模块入口代码  控制台应用程序的模块入口代码较普通的.EXE略有不同:Project2. dpr.8: begin0040823855           push ebp004082398BECmov        ebp, esp0040823B 83C4F0       add esp,-$100040823E A1B09340...

2018-11-01 10:17:00 359

转载 5.1 Win32应用程序:EXE

  Nico Bendlin的MiniDExe很好地演示了不使用任何Delphi例程来实现一个Win32应用程序的方法。对于一个可执行程序.EXE来说,只须满足如下条件,就可以在被Windows系统中执行:  是一个以.EXE方式生成的格式正确的PE(Portable Executable)文件有一个正确的入口地址并记录在PE格式文件的头部  编译器会按这样的规则生成文件模块,并将一段入...

2018-11-01 09:16:00 225

转载 第5章 面对Windows开发的基本实现

  Delphi可以实现Windows系统中的大多数可执行文件类型,这主要包括可执行程序(.EXE)和动态链接库(.DLL).其他的一些文件类型,通常以动态链接库的形式编译,只是输出的文件扩展名不同而已(例如.CPL,SCA,.OCX等).  Delphi使用动态链接库的格式实现了自己的库文件:包(.BPL).  本拿金面解析Delphi支持这些文件格式的每一个细节。转载于:http...

2018-11-01 08:56:00 94

转载 4.4 模块初始化与结束化

4.4.1模块入口代码  编译器为每个Delphi模块(可执行程序、动态链接库或包)生成模块入口代码。同类型的程序或模块,其入口代码是相同的。  编译器为可执行程序.EXE)生成的入口代码为:Project1.dpr.9:begin0044CA9855push      ebp0044CA99 8BEC       mov ebp,esp0044CA9B 83C4F0...

2018-10-31 18:02:00 164

转载 4.3 单元初始化与结束化

4.3.1单元初始化与结束化的内部例程  Delphi会初始化每一个单元,单元结束化则是初始化的逆过程。它们对应于System.,pas中的两个内部例程:procedure InitUnits;procedure FinalizeUnits;  编译器会采用深度优先遍历算法扫描项目的所有单元,然后生成一个初始化表。编译器保证每个单元在初始化表中不会重复,从而使得每...

2018-10-31 17:56:00 240

转载 4.2 例程的初始化与结束化

  例程没有专门用来初始化和结束化的内部函数或过程。  例程初始化时进行的操作包括:生成传值参数的备份,并替换原参数的传入地址;在栈上为局部变量分配空间,并初始化具有引用计数特征的变量;为数组和记录调用初始化过程,初始化其中具有引用计数特征的域(记录)或元素(数组)。  例程初始化过程中不会有堆操作。例程的结束化时进行的操作包括:清除传值参数的备份;按...

2018-10-31 17:43:00 142

转载 4.1 变量的初始化和结束化

  部分数据类型的变量是有初始化与结束化过程的。在什么时候调用这些初始化和结束化过程,取决于所定义变量的生命周期。对于局部变量来说,其生命周期自进入例程开始,到结束例程时终出。也就是说,局部变量的初始化与结束化过程,在例程的初始化与结束化过程中发:。  具有初始化与结束化过程的数据类型如表4-1所示。4.1.1初始化的必要性  为什么要初始化?或者更进一步地提出问题:为...

2018-10-31 17:18:00 331

转载 第4章 初始化和结束化过程

  每一个代码块都具有一个BEGIN和一个END,尽管在BASM中用ASM关键字代替了BEGIN,但它仍然起着相同的作用。  有些情况下,BEGIN和END只决定一个语法结构的开始和结束,例如记录和对象类型定义中使用的BEGIN和END。但更多的时候(例如例程定义中),BEGIN与END代表初始化与结束化过程。这一切都是编译器完成的,大多数情况下都是不可见的。  Delphi中加入了in...

2018-10-31 17:10:00 238

转载 3.8 其他

  下面整理了·些在BASM编程过程中常用资料的速查表格。■BASM的保留字  表3-2列出了BASM支持的保留字和运算符以及其他一些符号。其中“@”是用做标号,“,”是分隔符。  这些保留字的详细描述参见后续表格。寄存器EAX,AX,AH,ALEBX,BX,BH,BLECX,CX,CH,CLEDX,DX,DH,DI.DS,CS,SS,ES,GS,FSES...

2018-10-31 16:47:00 114

转载 3.7 汇编例程中的返回值约定

  在完全汇编例程中,函数必须按如下的规则来返回值:按照数据类型的长度,序数类型和一些简单类型(例如集合)使用AL、AX或EAX返回。实数类型通过浮点运算器的寄存器堆栈的ST(0)返回。Currency类型须先放大10000倍。指针类型、类类型以及类引用类型使用EAX返回。对于字符串、动态数组、方法指针、变体以及其他一些大小超过4字节的数据类型(例如短字符串、变体等)...

2018-10-31 10:22:00 479

转载 3.6 完全汇编例程与内嵌汇编例程

  BASM在例程中使用时,可以分成完全汇编例程和内嵌汇编例程两种。完全汇编是指用asm关键字替换了例程的begin,从而使例程完全由汇编代码实现。在Begin..End中间任意位置加入asm..end的Delphi例程都称为内嵌汇编例程。  完全汇编例程中没有例程入口时的begin,因此,Delphi不会形成值参数的复制。这意味着在完全汇编例程中,值参数与常数参数的处理是一致的。  通...

2018-10-31 10:20:00 201

转载 3.5 例程和API的调用与流程控制

  根据调用约定,通常以register约定来调用Delphi的函数和过程,以cdec1约定来与其他语言混合编程,以stdcal1约定来调用Windows的API。  下面的例子演示如何调用Delphi的函数:function DelphiFunc(I:Integer;var S1,S2:String):Integer;begin if I< Length(S...

2018-10-31 09:57:00 116

转载 3.4 例程入口参数及调用约定

  任何情况下,在寄存器的使用上,BASM遵循如下的规则:ASM语句执行过程中,必须保存EDI、ESI、ESP、EBP、EBX的值。ASM语句可以任意使用EAX、ECX、EDX。一个ASM代码块开始时,EBP指向当前堆栈,ESP指向栈顶。SS存放堆栈段的段地址;DS存放数据段的段地址;CS存放代码段的段地址。通常情况下,段地址寄存器满足如下条件:SS=ES=DS。...

2018-10-31 09:50:00 253

转载 3.3数据定义和数据类型强制转换

  BASM可以使用所有通过Delphi语法定义的变量、常量。BASM扩展了ASM的语法,用于访问记录、数组、对象等复杂的数据结构。下例简单解释了如何进行数据定义和访问:typeTRec=record rI:Integer; rS:String;end;var I:Integer; R:TRec; s:String =...

2018-10-31 09:48:00 171

转载 3.2 表达式的类别与类型

  在BASM的语句中,每一个表达式都必须能够在编译器中计算出准确的值或者寻址地址。如果不能满足这个条件,语句不会被编译通过。事实上,对于指令系统来说,每一个表达式都最终对应于一个确定的操作数。  因此,表达式的类别(Expresion classes),按表达式的计算结果可分成三类:寄存器、立即数和内存引用(存储器)。  与内存引用相关的表达式,会涉及到存储器寻址模式的问题,请查阅相关...

2018-10-31 09:12:00 1177

转载 3.1 BASM概念简要

  编语句由指令和零至三个表达式构成。表达式由常数(立即数)、寄存器和标识符构成。例如:movsb      //单指令语句jmp @Here    //一个表达式:标识符add eax,1   //两个表达式:寄存器和立即数//三个表达式:寄存器,标识符(内存地址),立即数imul edx,[ebx].RandSeed,08088405H  一段BASM...

2018-10-31 09:09:00 1712

转载 第3章 BASM(Borland 汇编语言)精要

  简单地了解一些BASM的知识,对于阅读Delphi内核源码是很有必要的。  与Delphil-5版本不同,高版本Delphi正在努力减少内核源码中汇编所占的比例。似乎Borland越来越想证明:即使不用汇编,也可以完成编译语言的全部内核。  BASM支持指令包括:Pentium系列Pentium Pro MMX SIMD SSEAMD 3DNOW!...

2018-10-31 09:07:00 481

转载 Absolute指示字

语法var Declaration absolute Constant expressionvar Declaration absolute Variable;说明absolute 指示字告诉 Delphi 把一个变量保存在一个特定的内存地址上。这个地址可以是一个数值化的地址或者是一个变量的名字,这个变量在内存中的位置跟 Variable 一样。你可以在局部或...

2018-10-31 09:02:00 139

转载 Abs函数

Abs函数语法function Abc(Number: Numeric type): Numeric type;说明Abs 函数计算并返回一个绝对值,这个函数内置于编译器中。返回值·如果这个数是一个整数,Abs 函数将检查这个值是否是负数,如果是,把这个数取相反数。返回值是 Integer,或者是 Int64 类型,取决于参数的类型。·对一...

2018-10-31 08:46:00 2234

转载 2.6引用-计数-写复制与类型信息

2.6.1引用计数与增加引用  Delphi内部对“引用(Reference)”的处理稍显混乱。赋值运算符“=”、函数的值参数入口和一些内部例程都可能导致引用。但是相同的规则并不能应用于所有支持计数的数据类型,并且,对于一些看似类同的数据类型,规则的作用范围也不尽相同。  从内部来看,Delphi已经尽可能地将不同类型的“增加引用”和“减少引用”例程分离开来。例如长字符串的“增加引用...

2018-10-30 19:26:00 140

转载 2.5变量的类型检测和强制转换

任何变量的类型检测都是在编译期完成的。因此,变量之间赋值,对于编译器来说,会发生如下的一些事件:如果两个类型是相同的简单类型,则将源的值复制到目标;如果两个类型是相同类型的记录或数组,则将简单数据类型的域复制,并添加其他域的引用计数;如果两个类型是兼容的,则调用类型转换内部例程,并把转换的结果作为目标。  System.pas中与数据类型相关的例程,主要用于支持兼...

2018-10-30 18:39:00 90

转载 2.4数据结构相关的例程

  编译器实现了基础数据类型(以及相关的强制转换机制),最小化的Delphi内核实现了可执行模块装载程序。因此,利用这样的最小化内核能够编译的应用只能做到“数据结构十内置运算符”。  在Delphi中使用数据结构,并不是要编译器简单地理解这些数据结构。更重要的是,必须有一套相关的内核函数和过程的支持。在源代码中,这些与基本数据结构相关的例程名通常是以“”开始的,它们虽然声明在Interf...

2018-10-30 16:31:00 328

转载 2.3数据结构的实现

2.3.1简单类型  简单类型的变量直接分配内存。可以通过上面的代码非常方便地取得它在内存中的地址及所占用内存的长度。  短字符串和集合类型,也使用与简单类型一致的规则。  简单类型的变量在内存中具有特定的格式,比如实数、枚举类型。有关其具体的存储格式,可以查阅参考书目中的《DELPHI技术手册》以及IEEE标准文档。2.3.2字符串  Delphi中的字符串格式多而且混乱。...

2018-10-30 10:55:00 146

转载 2.2变量与常量

2.2.1全局变量与局部变量  根据变量在源代码中定义的位置不同,可以分成局部变量和全局变量两种。此外,在多线程应用程序中,可以定义线程变量(ThreadVar)。下面的例子描述局部变量和全局变量在内存占用上的不同:program Project3;{$APPTYPE CONSOLE}{$R *.res}uses System.SysUtils;...

2018-10-30 10:06:00 73

转载 2.1基本数据类型

2.1基本数据类型  从Pascal到Delphi,语言中最基本的数据类型如表中所示。分类数据类型长度相关类型备注简单类型整数类型(integer)1-8IntegerCardinalShortintSmallintBongpintLongwordByteWordInt64除ln...

2018-10-30 09:24:00 68

转载 第2章-基本数据类型的实现

  深入了解Delphi中各种数据类型的实现,是分析Delphi源代码的第一步。其中,有两点是必须清楚的:数据类型的内存占用情况以及内存布局强制类型转换  在本章中,主要讨论上面的两个问题。大多数情况下,Delphi对于内部数据结构的处理代码.都放在编译器和内核例程中。因此,本章将使用相对较多的汇编代码,来解释Delphi对各种数据类型的处理。  常量...

2018-10-30 09:09:00 98

转载 第1章 最小化Delphi内核

  Delphi编译的,EXE最小到底能有多少个字节?  很多人会用最简单的方式做一个“Hello World!”程序来给出答案。一一在Delphi7中,会是15K字节。如果使用对话框,则马上会变成382K字节。  这里不去讨论为什么会有这种变化。因为我已经迫不及待地要向你介绍Nico Bendlin和他写的MiniDExe了。  MiniDExe的纪录是3584字节!1.1Mi...

2018-10-30 08:57:00 269

转载 Delphi 深入浅出VCL(4)-TApplicaton:应用程序对象

转载于:https://www.cnblogs.com/YiShen/p/9873032.html

2018-10-29 20:26:00 119

转载 Delphi 深入浅出VCL(4)-Componet:组件对象

TComponent = class(TPersistent, IInterface, IInterfaceComponentReference) protected type TComponentAsyncResult = class(TBaseAsyncResult) private FComponent: TCompon...

2018-10-29 20:05:00 229

转载 Delphi 深入浅出VCL(3)-TPersistent:持久化对象

转载于:https://www.cnblogs.com/YiShen/p/9872689.html

2018-10-29 19:30:00 168

转载 Delphi 深入浅出VCL(2)-TObject所有对象的根

TObject = class public constructor Create; procedure Free; procedure DisposeOf; {$IFNDEF AUTOREFCOUNT} inline; {$ENDIF} class function InitInstance(Instance: Pointe...

2018-10-29 18:53:00 156

转载 Delphi 深入浅出VCL(1)-Delphi对象基础VCL

转载于:https://www.cnblogs.com/YiShen/p/9872302.html

2018-10-29 18:14:00 379

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除