相关名词:
(1) idispatch是COM object的接口, 在Delphi中通常指一个OleObject.
(2) OleVariant是一种COM object兼容的Variant类型, 可以通用任何Ole Automation 类型, 他与CreateOleObject创建的idispatch兼容
1:Com+的编写:
1:File---->New---->Other....---->ActiveX Library 标签 下的 Transactional Object
2: 然后填写: Co...
很多架构师都是从好的开发人员逐步过渡而来的,但并非每个好的开发人员都希望成为架构师,而且他们并不是都适合做架构师。无论您是打算进行职业转型的开发人员,还是寻找能承担体系结构设计责任的合适人选的经理,都务必对此转型过程有个清楚的了解。本文将讨论从实现专家到架构师的过渡过程。
在寻找优秀的指挥的时候,您首先要找的是一名优秀的音乐演奏家。但并非每个音乐演奏家都能成为优秀的指挥。架构师的专业发展方面也与此类似。越来越多的 IT 组织开始认识到良好软件体系结构的重要性,架构师职业正迅速发展为 IT 内一个独立的门类。由于要从相当小的候选范围内招募架构师,因此这就给管理带来了一些新挑战。...
软件架构强调的是整体,而整体性的设计决策必须基于对需求的全面认识;
软件架构应该是稳定的,而遗漏了重要需求的架构设计面临的是返工的命运。
一言以蔽之,全面认识需求,是生产出高质量软件所必须的“第一项修炼”。
作为一个软件架构师,也不应对所有需求“胡子眉毛一把抓”,而是应全面认识需求——分门别类地将需求梳理清楚。
下图所展示的“需求空间分割图”揭示了全面认识需求的要求。要全面认识需求,意味着我们必须从不同级别来考察需求:组织级、用户级、开发级,还要对每个级别考虑不同类型的需求:功能需求、质量属性、约束。
一方面,需求是分层次的。一个成功的软件...
四、实战 由于Windows下的溢出对于本地利用来说没有多大意义,所以我们一个存在HEAP溢出漏洞的网络程序为例:/* win_heap_vul.c Windows下存在HEAP溢出漏洞的服务端程序 */ #define PORT 1500 #define BUFFLEN 32 //分配内存的大小 #define COPYLEN 64 //实际拷贝的大小 int main() { WSADATA wsd; SOCKET sListen, sClient; struct sockaddr_in local, client; int iAddrSize; HANDLE hHeap; char...
一、概述 前一段时间ASP的溢出闹的沸沸扬扬,这个漏洞并不是普通的堆栈溢出,而是发生在HEAP中的溢出,这使大家重新认识到了Windows下的HEAP溢出的可利用性。其实WIN下的HEAP溢出比Linux和SOLARIS下面的还要简单得多,大家肯定已经都搞明白了,我来做是一个总结,以免自己将来忘了。由于缺乏这方面的资料及源代码,所有的分析结果都来自于反汇编和调试的分析,所以错误之处在所难免,敬请各位指正。 以下所有程序的测试环境为: 中文版Windows 2000 + SP2 VC++ 6.0 二、Windows的HEAP管理机制简述 同LINUX一样,Windows的HEAP区是程序动...
一、概述 前一段时间ASP的溢出闹的沸沸扬扬,这个漏洞并不是普通的堆栈溢出,而是发生在HEAP中的溢出,这使大家重新认识到了Windows下的HEAP溢出的可利用性。其实WIN下的HEAP溢出比Linux和SOLARIS下面的还要简单得多,大家肯定搞明白了,我来做一个总结,以免自己将来忘了。由于缺乏这方面的资料及源代码,所有的分析结果都来自于反汇编和调试的分析,所以错误之处在所难免,敬请各位指正。程序的测试环境为:中文版Windows 2000 + SP2 VC++ 6.0 二、Windows的HEAP管理机制简述 同LINUX一样,Windows的HEAP区是程序动态分配一块内存...
一、VBA代码含义
Microsoft Word是一个集成化环境,是美国微软公司的字处理系统,但是它决不仅仅是一个字处理系统,它集成了Microsoft Visual Basic,可以通过编程来实现对Word功能的扩展。
Microsoft Visual Basic在word中的代码即Word的宏,通过编写Word宏,可实现一些文档处理的自动化,如实现文档的自动备份、存盘等,可扩展Word文档的功能,因此,能够充分利用Word的特性,甚至使Word成为自己软件的一部分。
Word的宏既有有利的一部分,因为它能够帮助我们实现文档的自动化,但是Word的宏也不是纯粹的有利,有时它可能危...
如何在Delphi里面利用Word的VBA代码进行一些总结
1、 生成VBA代码。Word本身具有很强的可扩展性,尤其是支持用户自定义功能,其实现 的主要方式就是通过VBA代码来实现的。在“工具->宏->Visual Basic编辑器”里面就可以看 到具体的宏代码,可以直接进行编辑。而且还可以使用录制宏的功能自动生成宏代码。方法是 选择“工具->宏->录制新宏”,然后执行自己想通过程序实现的功能,如存盘、打印等功能, 此时Word一边执行你要实现功能,一边将你的操作生成了一个宏,在实现功能后,可以选择 “工具->宏->VisualBasic编辑器”,查看生成的宏代码。
例如...
procedure TForm1.Button1Click(Sender: TObject); begin try IdSMTP1.AuthenticationType:=atLogin; //设置登陆类型 IdSMTP1.Username:=Edit1.Text; //设置登陆帐号 IdSMTP1.Password:=Edit2.Text; //设置登陆密码 IdSMTP1.Host:=Edit3.Text; //设置SMTP地址 IdSMTP1.Port:=strtoint(Edit4.Text); //设置端口 必须转化为整型 ...
///////Begin Sourceuses Math;function DBGridRecordSize(mColumn: TColumn): Boolean;{ 返回记录数据网格列显示最大宽度是否成功 }begin Result := False; if not Assigned(mColumn.Field) then Exit; mColumn.Field.Tag := Max(mColumn.Field.Tag, TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText)); Result ...
1. 如果想你的程序能够正确处理异常情况的话,请引用SysUtils.pas单元,否则即使程序使用了try。。。except。。。也不能正确捕获异常。2. 定义常量字符串的一种方式resourcestringaa='aaaa';raise Exception.CreateRes(@aa);3. 字符串常量数组的初始化const constarray:array [0..2] of string=(‘first’,’second’,’third’);4. 结构体初始化type Tstructinit=recordA1:integer;A2:array [0..2] of integer;E...
误区1:在项目的需求分析阶段,开发方与客户方在各种的问题的基本轮廓上达成一致即可,具体细节可以在以后填充。因为无论开始时有多么细致, 以后对需求的修改几乎是必然的。分析:这是一种非常危险的思想。实际上许多软件项目失败的最主要的原因就是需求阶段对问题的描述不够细致,导致后来预算超出或者时间 进度达不到要求。正确的做法是:在项目需求分析阶段,双方必须全面地尽可能细致地讨论项目的应用背景、功能要求、性能要求、操作界面 要求、与其他软件的接口要求,以及对项目进行评估的各种评价标准。并且,在需求分析结束以后,双方还要建立可以直接联系的渠道,以尽 早地对需求变动问题进行沟通。
误区2:软件项目的需...
----目前在许多学习软件、游戏光盘中,经常会看到各种 图形显示技巧,凭着图形的移动、交错、雨滴状、百页窗、积木堆叠等显现方式,使画面变得更为生动活泼,更 能吸引观众。本文将探讨如何在Delphi中实现各种图形显示技巧。 基本原理 ----在Delphi中,实现一副图象的显示是非常简单的,只要在Form中定义一个TImage组件,设置其picture属性,然后选 择任何有效的.ICO、.BMP、.EMF或.WMF文件,进行Load,所选文 件就显示在TImage组件中了。但这只是直接将图形显示在窗体中,毫无技巧可言。为了使图形显示具有别具一格的效果,可以按下列步骤实现: ...
用 Delphi 编写 VxD 设备驱动程序(转)关键词:Delphi控件杂项作者:Emil Biserov(dinfo@mail.primorye.ru)(Russion) 英语翻译:Vitaly Zayko(zayko@vitsoftware.com) 中文翻译改编:Riceball(teditor@mailroom.com) 前言 用 Delphi 3.0 编写 VxD 设备驱动程序,在Delphi 3 下编译通过,Delphi 2 下没有测试,Delphi 4 建立的 Object 文件 M$ Linker 5.12.8181 不能识别,这里使用的汇编器是M$的Macro A...
procedure CheckResult(b: Boolean);begin if not b then Raise Exception.Create(SysErrorMessage(GetLastError));end;function RunDOS(const Prog, CommandLine,Dir: String;var ExitCode:DWORD): String;var HRead,HWrite:THandle; StartInfo:TStartupInfo; ProceInfo:TProcessInformation; b:Boolean; sa:T...