第18章_创建Windows程序

合集下载

SIMPL Windows基础教程 - 最终版

SIMPL Windows基础教程 - 最终版

快思聪SIMPL Windows编程语言初级教程目录第一章快思聪SIMPL WINDOWS (5)概览 (5)关于初级教程 (5)快思聪开发软件 (6)SIMPL Windows (6)快思聪VisionTool Pro-e (6)DEAL TM for Windows (6)Media Manager TM System Builder (6)D3 Pro TM (7)数据库(Database) (7)产品目录光盘 (7)快思聪控制系统 (9)为什么对控制系统编程? (9)控制系统组件 (9)主机 (9)网络控制模块 (10)Plug-in控制卡 (10)用户界面 (10)触摸屏 (10)键盘(按键面板) (10)无线摇控界面 (10)用户设备 (10)控制方式 (11)继电器控制 (11)串口通信控制 (11)红外 (11)自定义串量 (13)RS232,RS422,RS485 (13)MIDI(数字音乐设备接口) (14)模拟电压 (14)自定义快思聪接口界面 (14)Cresnet (14)第二章SIMPL WINDOWS编程 (16)SIMPL介绍 (16)函数库 (16)设备函数 (16)逻辑函数 (16)函数属性 (16)输入 (17)输出 (17)信号类型 (18)数字量 (18)模拟信号量 (18)串量 (19)特殊信号0和1 (19)逻辑波跟逻辑解决方案 (19)用户界面编程 (21)按钮动作 (21)按钮反馈 (21)子页(仅用于触摸屏) (23)模拟显示(仅用于触摸屏) (23)间接文本(仅用于触摸屏) (24)用SIMPL W INDOWS来创建一个程序 (25)编程步骤 (25)基本编程规则 (25)建立一个系统 (25)网络硬件 (28)控制插卡 (29)串口设备 (29)用户设备 (30)网络ID (30)配置设备 (31)快思聪网络设备 (31)以太网设备 (32)串口设备 (33)触摸屏 (33)连接信号 (34)定义用户界面信号 (34)使用逻辑函数 (35)第三章逻辑函数编程 (37)概述 (37)逻辑函数的类型 (37)基本逻辑 (38)NOT函数 (38)OR函数 (38)AND函数 (40)Buffer函数 (41)状态逻辑 (46)Set/Reset Latch函数 (46)Toggle函数 (47)Interlock函数 (49)基于时间的逻辑 (52)One Shot 系列 (52)Multiple One Shot (53)Retriggerable One Shot (53)Delay Symbol (54)Oscillator Symbol (55)模拟逻辑 (57)Analog Ramp函数 (57)Analog Initialize (58)Analog Preset函数 (59)Serial/Analog One-Shot (61)Modules模块 (61)Communication Settings (62)Compiling and Uploading Programs (64)第一章快思聪SIMPL Windows概览关于初级教程编写本教程的目的在于向程序设计人员介绍SIMPL windows编程技术以及如何应用快思聪控制系统,这包括对控制系统如何利用触摸屏和按钮作为用户界面的理解,通过这些界面,使用者可以发送一个信号(主要是逻辑函数)给控制系统处理后输出用以最终控制一个设备。

网络操作系统

网络操作系统

第10章 服务器性能监视的 准备
第11章 监视服务器性能 第12章 维护设备驱动程序
第13章 资源访问管理
第14章 实现打印 第15章 打印管理
第16章 磁盘管理
第17章 数据存储管理 第18章 故障恢复的管理
第18章 故障恢复的管理
为故障恢复作准备
备份数据
计划运行备份作业 恢复数据
配置“卷影副本”
网络操作系统管理——Windows Server 2003的管理
第1章 账户和资源管理介绍 第2章 管理服务器 第3章 管理用户和计算机账 户 第4章 管理组 第5章 组织单位对象的访问 管理 第6章 实现组策略 第7章 使用组策略管理用户 环境 第8章 应用管理模板和审核 策略 第9章 使用软件更新服务 管理软件
备份计划运行选项
计划选项
一次性 每天 每周 每月 在系统启动时 在登录时 空闲时
18.3.2 备份计划运行选项
执行任务
一次,在指定日期的指定时间 每天中指定的时间 每周中的指定天数中的时间 在一个月中所有指定的时间 下次系统启动时 下次作业的拥有者登录时 当系统空闲时制定了的时间数目
备份计划运行选项
改变存储卷,首先删除卷影副本
在服务器上配置卷影副本
18.5.2 在服务器上配置卷影副本
演示: 演示在服务器上配置卷影副本
卷影副本的“以前版本的客户端”
18.5.3 卷影副本的“以前版本的客户端”
服务器上的卷影副本客户端软件
%systemroot%\system32\clients\twclient\x86 目录
第18章 故障恢复的管理
为故障恢复作准备
备份数据
计划运行备份作业 恢复数据
配置“卷影副本”

第18章 BOOT客户管理系统

第18章 BOOT客户管理系统
1. Spring框架所需的JAR包(10个)
• aopalliance-1.0.jar • aspectjweaver-1.8.10.jar • spring-aop-4.3.6.RELEASE.jar • spring-aspects-4.3.6.RELEASE.jar • spring-beans-4.3.6.RELEASE.jar • spring-context-4.3.6.RELEASE.jar • spring-core-4.3.6.RELEASE.jar • spring-expression-4.3.6.RELEASE.jar • spring-jdbc-4.3.6.RELEASE.jar • spring-tx-4.3.6.RELEASE.jar
为了验证上述内容,我们可以在用户控制器类UserController中编写一个 跳转到客户管理页面的方法,其代码如下所示。
/** * 模拟其他类中跳转到客户管理页面的方法 */ @RequestMapping(value = "/toCustomer.action") public String toCustomer() {
varchar varchar varchar varchar varchar
int char varchar
长度
32 10 50 50 10 10 1 100
是否主键
是 否 否 否 否 否 否 否
表名(英文)
base_dict 说明
数据字典id 数据字典类别代码 数据字典类别名称 数据字典项目名称 数据字典项目代码(可为空) 排序字段 是否可用:1:使用 0:停用 备注
✎ 18.2 数据库设计
客户信息表
表名(中文)
客户信息表

第18章emWin(UCGUI)汉字显示方式一(FontCvt的使用)

第18章emWin(UCGUI)汉字显示方式一(FontCvt的使用)

第18章汉字显示方式一(FontCvt的使用)本期教程主要跟大家介绍官方的小工具Font Converter的使用方法,使用官方的字体转换工具,字体的显示效果要比网上那些针对UCGUI设计的字体生成工具好非常多。

4位抗锯齿的显示效果更是非常棒。

在开头先跟大家强调两点,一个是这个字体小工具必须的使用STemWin软件包里面的,SEGGER官网下载的和MDK安装目录里面带的都是评估版,另一点是在教程中我会要求大家将要显示汉字的C文件转换为UTF-8编码,我仅仅是指的将这个显示汉字的C文件转换为UTF-8编码,这点要切记。

18. 1 使用FontCvt生成字库C文件的方法18. 2 在开发板上面实现中文显示18. 3 总结18.1使用FontCvt生成字库C文件的方法我们先讲如何用这个软件生成部分的汉字数据,这里就以“安富莱电子”五个字进行说明。

18.1.1第一步:打开选择Standard,16bit unicode18.1.2第二步:打开选择字体和字体大小18.1.3第三步:选择禁止所有的字符18.1.4第四步:用unicode软件转换函数用中文转unicode的小软件得到“安福莱电子”这5个字的unicode编码我这里在百度上面找了一个网页应用。

18.1.5第五步:在FontCvt上使能这个五个字的编码在Font Converter软件上面使能这个五个字的unicode编码,以“安”字为例它的unicode编码是5b89,这里有两种办法找这个字。

方法一:直接的在软件里面查找,根据左边的unicode编码。

方法二:通过限制范围查找。

18.1.6第六步:然后点击保存为C文件要将前面的五个字全部找到并使能以后再做保存。

18.2在开发板上面实现中文显示下面我们用18.1小节讲的汉字生成方式生成7中类型的字体。

前三种是Standard的宋体,大小是16,36和72.第四种是144*144点阵的,有没有这么大的字体,需要手动往大小选项里面填写144,并选择右侧的Pixels。

C#程序设计及应用教程(第2版)习题答案

C#程序设计及应用教程(第2版)习题答案

网络应用编程作业及答案课程名称网络应用编程院(部)计算机与信息工程学院教研室(实验室) 网络工程教研室主讲教师侯彦娥职称讲师使用教材21世纪高等学校计算机规划教材(精品系列)《C#程序设计及应用教程(第2版)》,马骏等主编,人民邮电出版社第1章作业及答案本章作业题目:P16页1、2、31、可以用C#编写哪些类型的应用程序?【解答】1)控制台应用程序。

2) Windows应用程序。

3) Web应用程序。

4) Web服务应用程序。

5) 水晶报表Web应用程序。

6)智能设备应用程序。

7)安装和部署应用程序。

2、什么是命名空间?命名空间和类库的关系是什么?【解答】1)命名空间是对类的一种逻辑上的分组,即将类按照某种关系或联系划分到不同的命名空间下。

2)命名空间又可以包含其它的命名空间,例如s,是指System命名空间下有Windows命名空间,Windows命名空间下有Forms命名空间。

3)所有类库都在规定的命名空间下。

3、举例说明using关键字有哪些主要用途。

【解答】在C#中,using关键字有3个用途1)2)3)作为语句,定义一个范围。

例如:Font font1 = new Font("Arial", 10.0f);using (font1){…}程序执行到“}”时,就会自动释放font1对象。

第2章作业及答案本章作业题目:P41 2、3、4、5、7容易做错的题目:5题(有部分同学看成求平方和了)1、C#支持的数据类型有那些?值类型和引用类型有何不同?【解答】C#支持的数据类型有:(1)值类型,包括:简单类型、结构类型、枚举类型。

其中,简单类型又分为:整型、布尔型、字符型、浮点型、小数型。

(2)引用类型,包括:对象类型、类类型、接口、元数据、字符串类型、数组。

值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

计算机应用基础win7+office2010第3版课后习题答案

计算机应用基础win7+office2010第3版课后习题答案

计算机应用基础(Windows7+office2010)第三版高等教育出版社周南岳主编章节练习题答案第1章计算机基础知识1.填空题(1)随机存储器、只读存储器、外存储器(2)信号线、各部件之间传递信息和数据控制总线、数据总线、地址总线(3)主频、功耗、指令集、缓存、核心数(4)CRT、LCD、LED(5)显示器(6)1101(7)1000110(8)11100(9)552.选择题(1)A(2)B(3)B(4)C(5)D(6)C(7)B(8)D(9)D(10)D(11)B(12)C(13)C(14)B(15)A(16)A(17)B(18)C(19)B(20)B3.判断题(1)×(2)√(3)√(4)×(5)×(6)×(7)√(8)√(9)√(10)×(11)√第2章计算机基础知识1.填空题(1)微软(2)资源管理、程序控制、人机交互(3)打开文档记录(4)名称、时间、类型(5)音乐、图片、文档(6)全屏、一半(7)资源管理器、计算机窗口(8)复制(9)文件扩展名(10)只读、隐藏、存档(11)超级管理员、被授权管理员、来宾用户(12)Disk Defragment(磁盘碎片整理程序)(13)创建系统映像(14)破坏性、传染性、潜伏性、隐藏性、不可预见性(15)音码、形码、音形码(16)压缩2.选择题(1)A(2)D(3)D(4)D(5)B(6)D(7)C(8)A(9)B(10)A(11)B(12)B(13)A(14)D(15)C(16)C(17)A(18)D(19)A(20)D(21)A(22)D(23)C3.判断题(1)√(2)√(3)√(4)×(5)√(6)×(7)√(8)√(9)√(10)√(11)×(12)×(13)√(14)√(15)×(16)×(17)×(18)×(16)C第3章因特网(Internet)应用1.填空题(1)ADSL、小区宽带(2)通信协议(3)图片另存为(4)网址(5)浏览器、IE浏览器(6)TCP/IP协议(7)32、128、0-255(8)电话线与ADSL Modem(9)万维网2.选择题(1)B(2)C(3)D(4)C(5)B(6)A(7)D(8)C(9)D(10)B(11)D(12)C(13)B(14)C(15)D(16)D(17)D3.判断题(1)√(2)×(3)×(4)×(5)√(6)×(7)√(8)×(9)×(10)√(11)√第4章文字处理软件应用1.填空题(1)显示标尺显示文档的页边距、段落缩进、制表符等。

第18章图元文件_18.2增强型图元文件(emf)(1)

第18章图元文件_18.2增强型图元文件(emf)(1)

第18章图元⽂件_18.2增强型图元⽂件(emf)(1)18.2 增强型图元⽂件(emf)18.2.1 创建并显⽰增强型图元⽂件的步骤(1)创建:hdcEMF = CreateEnhMetaFile(hdcRef,szFilename,lpRect,lpDescription);参数含义hdcRef参考设备环境,NULL时表⽰以屏幕为参考szFileName指定⽂件名时,创建磁盘⽂件(.EMF)。

为NULL时创建内存图元⽂件lpRect⽤于描述图元⽂件的⼤⼩和位置(以0.01mm为单位),可⽤它精确定义图元⽂件的物理尺⼨lpDescription对图元⽂件的⼀段说明。

包括创建应⽤程序的名字、⼀个NULL字符、对图元⽂件的⼀段说明以及两个NULL字符。

返回值增强型图元⽂件DC。

(注意不是图元⽂件的句柄,要获得实际的图元⽂件句柄,得调⽤CloseEnhMetaFile函数)(2)关闭图元⽂件hEmf = CloseEnhMetaFile(hdcEMF);返回图元⽂件句柄(3)显⽰图元⽂件 PlayEnhMetaFile(hdc,hEmf,&rect);参数含义hdc设备环境句柄hEmf图元⽂件句柄lpRect指定显⽰区域(逻辑单位),GDI会缩放图像以适应该矩形范围(4)删除图元⽂件 DeleteEnhMetaFile(hEmf);【Emf1程序】 ①创建图元⽂件时,矩形和画线的坐标⼤⼩并不重要,重要的是坐标间的对应关系。

可以将他们同时加倍或同时减去⼀个常数,结果是⼀样的。

②图像会被拉伸,以满⾜PlayEnhMetaFile函数中指定的矩形尺⼨。

③这个例⼦中,图形的对⾓线会出现不完全落在顶点上,这是Windows在存储图元⽂件中坐标的处理⽅式造成的,会在后⾯加以解决。

/*------------------------------------------------------------EMF1.C -- Enhanced Metafile Demo #1(c) Charles Petzold, 1998------------------------------------------------------------*/#include <windows.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[] = TEXT ("EMF1") ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("This program requires Windows NT!"),szAppName, MB_ICONERROR) ;return0 ;}hwnd = CreateWindow (szAppName, // window class nameTEXT ("Enhanced Metafile Demo #1"), // window captionWS_OVERLAPPEDWINDOW, // window styleCW_USEDEFAULT, // initial x positionCW_USEDEFAULT, // initial y positionCW_USEDEFAULT, // initial x sizeCW_USEDEFAULT, // initial y sizeNULL, // parent window handleNULL, // window menu handlehInstance, // program instance handleNULL) ; // creation parametersShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {static HENHMETAFILE hEmf;HDC hdc,hdcEMF;PAINTSTRUCT ps ;RECT rect ;switch (message){case WM_CREATE:hdcEMF = CreateEnhMetaFile(NULL, NULL, NULL, NULL); //4个参数全为NULLRectangle(hdcEMF, 100, 100, 200, 200);MoveToEx(hdcEMF, 100, 100, NULL); //左上——右下LineTo(hdcEMF, 200, 200);MoveToEx(hdcEMF, 200, 100, NULL); //右上——左下LineTo(hdcEMF, 100, 200);hEmf = CloseEnhMetaFile(hdcEMF); //返回图元⽂件句柄,并保存在静态变量中return0 ;case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ;GetClientRect (hwnd, &rect) ;rect.left = rect.right / 4;rect.right = 3 * rect.right / 4;rect.top = rect.bottom / 4;rect.bottom = 3 * rect.bottom / 4;PlayEnhMetaFile(hdc, hEmf, &rect); //在指定的rect区域内显⽰图元⽂件EndPaint (hwnd, &ps) ;return0 ;case WM_DESTROY:DeleteEnhMetaFile(hEmf); //删除内存中的图元⽂件PostQuitMessage (0) ;return0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;}18.2.2 窥探增强型图元⽂件的内部机制(1)实例图解增强型EMF⽂件结构(2)⽂件结构:头记录(ENHMETAHEADER)、各记录(ENHMETARECORD)、⽂件结尾(EMR_EOF) ①头记录ENHMETAHEADER偏移量字段含义0x00DWORD iType;总是等于EMR_HEADER(即1)0x04DWORD nSize;结构的⼤⼩。

VisualC++轻松入门第18章二进制码功能模块动态链接库DLL教学教案

VisualC++轻松入门第18章二进制码功能模块动态链接库DLL教学教案
• DLL理论基础:读者将学会DLL理论的基础理论,了解DLL导 入导出的基本原理、隐式和显式连接,以及符号和序号连 接等基本概念。
• DLL自动化组件的开发:读者将学会使用自动化来开发DLL 组件,通过实例,掌握DLL自动化接口的开发。
• DLL的调用:通过实例实践,读者将学会调用自己开发的 DLL组件,并学会在VB Script和JavaScript中使用。
用应用程序向导创建MFC DLL项目,然后在Windows系统中 注册该DLL文件,最后使用VB Script和HTML中的 Javascript来调用该DLL的功能函数。本节的实例是开发一 个数学DLL,这个DLL封装了一些常用的数学函数,主要如 下: • 求两个数之和:传递参数为两个实数,返回值为两个参数 之和。 • 求圆的面积:传递参数是圆的半径,返回值为圆的面积。 • 求平面坐标中任意两点的距离:通过传递两个点的坐标, 返回两个点的距离。
NONAME • ??0CSocketWnd@@QAE@XZ @ 261 NONAME
18.1.4 DllMain()函数
• DLL文件不是执行文件,不能直接执行,也就是它天生就是被其他 客户程序使用的,当DLL文件被加载时,将会调用 _DllMainCRTStartup()函数,该函数调用全局对象的构造函数, 而全局对象的构造函数体中调用了全局函数DllMain()。
• DLL的调用:熟练掌握调用自己开发的DLL组件, 并掌握在VB Script和JavaScript中使用。
本章习题
• 一、填空题 • 1.COM的中文全称是________________。 • 2.DLL的中文全称是________________。 • 二、选择题 • 1.关于组件的说法,以下说法正确的是( )。 • A.组件可以降低软件的复杂度和维护成本。 • B.组件不稳定,不适合软件工程应用。 • C.组件只提供函数接口。 • D.组件安全性高,可以随意在Web浏览器中运行。 • 2.关于组件的使用,以下说法错误的是( )。 • A.组件可以在Web应用程序开发中调用。 • B.使用C++开发的组件只能使用在C++语言上。 • C.组件可以通过Web服务器前台代码调用。 • D.JAVA编写的组件可以在C++中调用。

第18章 CMAP程序

第18章 CMAP程序

第18章 CMAP程序18.1 CMAP概述ANSYS程序和DISPLAY程序记录彩色的方法是赋予各种色彩不同的索引号。

索引号及其分配的色彩之间的相关性定义了彩色图,可通过CMAP程序产生用户化的彩色图文件。

CMAP 程序同样支持标准输入输出的重定向。

要运行CMAP程序须有一种诸如鼠标的光标设备。

18.2 作为独立程序启动CMAPCMAP程序可脱离ANSYS程序运行,启动CMAP程序的方法有:从XANSYS启动器中启动(UNIX系统),从图标菜单启动(WINDOWS系统),从UNIX命令行启动或在ANSYS程序中启动。

18.2.1 从UNIX系统的启动器中启动CMAP可以从ANSYS程序的UNIX启动器中进入CMAP程序,操作过程如下:1.从XANSYS启动器中选择UTILITY菜单项,CMAP程序显示如下提示符:Enter Display Device Name:Press RETURN if current value is correctCMAP可能会直接进入下一步,但如果CMAP停在上述提示符上面没有继续下去,则要键入适当的图形设备名,发出/SHOW命令,可显示设备名。

CMAP显示下列提示符:Set Display Device Specifications(Press RETURN if the current value is correct)Enter Number of Bit Planes (Currently 8)键入彩色位面数,如何使用16色的显示设备,键入4(即 16=24),如使用256色的显示设备,使用缺省值8(256=28),若不需要更改则按下回车键,CMAP显示如下提示符:Enter the number of contours (Maximum=128)(currently 9)注释:仅当图形设备设为X11C时方可独立地改变等值色彩。

对其它设备该选项将被忽略。

键入等值线号,若不需要作任何改变,键入回车键。

perltk教程

perltk教程

水木社区(展开完整界面) → Perl的世界→ 精华区文章阅读Perl 版 (精华区)发信人: sisoe (游刃), 信区: Perl标题: perl/tk教程发信站: BBS 水木清华站 (Tue Aug 29 12:23:44 2000)perl/tk 教程浦绍忠前言perl/tk 在图形界面、表框设计、菜单设计等方面功能强大,对字体、颜色和绑定使用灵活,容易上手。

本教程写作原则:简洁明了地介绍 perl/tk 的功能及其使用,对功能的使用一般只介绍一种方法,其余方法由读者自己实践。

对于perl/tk的常用功能及其使用给以相应的例子,为突出选项的作用,在例子中有时不是遵循美学原则,得到漂亮的界面,而是使用一些夸张的选项值。

教程的介绍对象是 perl/tk 402.002 版本,使用Windows 序列操作系统,本教程中全部例子都在 Windows95,Windows98 下试验通过。

讲解 perl/tk 基本组件,基本使用方法,对 perl/tk 的扩展模块不作说明,由读者自己去学习掌握。

假定读者已掌握 perl 基础知识,对例子中用到的perl基础知识不作讲解。

第一章 perl/tk 概要说明一。

perl/Tk的取得从多个网站上可以取得perl/Tk, perl/Tk的安装需要C++的编译器。

Gurusamy Sarathy 已经为使用 Intel 芯片的机器在 NT 上安装了最常用模块的tar 文件,压缩文件大约有6M,安装后大约有24M,安装后就可以在 Windows 系列系统下使用 Perl/Tk。

为便于下载,你可以从国内网站"http://ftp.freesoft./pub/languages/perl/CPAN/modules/by-authors/id/GSAR/"取得Gurusamy Sarathy 安装好的 perl5.00402-bindist04-bc.zip文件。

大学计算机第6版习题汇总18章春

大学计算机第6版习题汇总18章春

第 1 章 计算机文化和计算思维基础选择题1. _____ 是现代通用计算机的雏形。

A. 宾州大学于 1946年 2 月研制的 ENIACB. 查尔斯?巴贝奇于 1934年设计的分析机C. 冯??诺依曼和他的同事们研制的 EDVACD. 艾兰 ?图灵建立的图灵机模型2. 世界上第一台电子计算机ENlAC 诞生于 ______ 年。

A. 1939B. 1946C. 1952D. 1958 3. 计算机科学的奠基人是 ______ 。

A. 查尔斯 ?巴贝奇B.艾兰?图灵C. 莫奇莱和埃克特D. 冯??诺依曼4. 在下列关于图灵机的说法中,错误的是 ________ 。

A. 现代计算机的功能不可能超过图灵机B. 图灵机不可以计算的问题现代计算机也不能计算C. 图灵机是真空管机器D. 只有图灵机能解决的计算问题,实际计算机才能解决5. 在计算机运行时, 把程序和数据一样存放在内存中, 这是 1946年由 _______ 领导的小组正式提出并论证的。

11. 在电子商务中,企业与消费者之间的交易称为 _________A. B2BB. B2CC. C2CD. C2B12. 下列不属于人类三大科学思维的是 ________ 。

A. 理论思维B. 逻辑思维C. 实验思维13. 下列关于计算思维的说法中,正确的是 ________ 。

A. 计算机的发明导致了计算思维的诞生B.C. 计算思维是计算机的思维方式D.14. 下列关于可计算性的说法中,错误的是 ________ 。

A. 所有问题都是可计算的B. 图灵机可以计算的就是可计算的C. 图灵机与现代计算机在功能上是等价的A. 冯??诺依曼B. 布尔6. 计算机从其诞生至今已经历了A. 计算机所采用的电子器件 C. 程序设计语言 D. C. 艾兰 ?图灵 D. 爱因斯坦4 个时代,这种对计算机划代的原则是根据B.7. 物理器件采用晶体管的计算机被称为A. 第一代计算机B.C. 第三代计算机D.8. 专门为某种用途而设计的计算机,称为A. 专用B.通用 C.9. 计算机最早的应用领域是 _______ 。

C#高级编程(共372页)

C#高级编程(共372页)

目录第Ⅰ部分C# 语言第1章.NET体系结构 (3)1.1 C#与.NET的关系 (3)1.2 公共语言运行库 (3)1.3 详细介绍中间语言 (6)1.3.1 面向对象和接口的支持 (7)1.3.2 相异值类型和引用类型 (8)1.3.3 强数据类型 (8)1.3.4 通过异常方法处理错误 (14)1.3.5 特性的使用 (14)1.4 程序集 (14)1.4.1 私有程序集 (15)1.4.2 共享程序集 (16)1.4.3 反射 (16)1.5 .NET Framework类 (16)1.6 命名空间 (17)1.7 用C#创建.NET应用程序 (18)1.7.1 创建应用程序 (18)1.7.2 创建Windows窗体 (20)1.7.3 Windows控件 (20)1.7.4 Windows服务 (20)1.8 C#在.NET企业体系结构中的作用 (20)1.9 小结 (22)第2章C#基础 (23)2.1 引言 (23)2.2 第一个C#程序 (23)2.2.1 代码 (24)2.2.2 编译并运行程序 (24)2.2.3 详细介绍 (25)2.3 变量 (27)2.3.1 变量的初始化 (27)2.3.2 变量的作用域 (28)2.3.3 常量 (31)2.4 预定义数据类型 (32)2.4.1 值类型和引用类型 (32)2.4.2 CTS类型 (33)2.4.3 预定义的值类型 (33)2.4.4 预定义的引用类型 (36)2.5 流控制 (39)2.5.1 条件语句 (39)2.5.2 循环 (43)2.5.3 跳转语句 (46)2.6 枚举 (47)2.7 数组 (49)2.8 命名空间 (50)2.8.1 using语句 (51)2.8.2 命名空间的别名 (52)2.9 Main()方法 (53)2.9.1 多个Main()方法 (53)2.9.2 给Main()方法传送参数 (54)2.10 有关编译C#文件的更多内容 (55)2.11 控制台I/O (56)2.12 使用注释 (58)2.12.1 源文件中的内部注释 (58)2.12.2 XML文档说明 (59)2.13 C#预处理器指令 (61)2.13.1 #define和 #undef. 612.13.2 #if, #elif, #else和#endif. 62 2.13.3 #warning和# error. 632.13.4 #region和#endregion.. 63 2.13.5 #line.. 642.13.6 #pragma.. 642.14 C#编程规则 (64)2.14.1 用于标识符的规则 (64)2.14.2 用法约定 (65)2.15 小结 (71)第3章对象和类型 (72)3.1 类和结构 (72)3.2 类成员 (73)3.2.1 数据成员 (73)3.2.3 只读字段 (88)3.3 结构 (89)3.3.1 结构是值类型 (90)3.3.2 结构和继承 (91)3.3.3 结构的构造函数 (91)3.4 部分类 (92)3.5 静态类 (94)3.6 Object类 (94)3.6.1 System.Object方法 (94)3.6.2 ToString()方法 (95)3.7 小结 (97)第4章继承 (98)4.1 继承的类型 (98)4.1.1 实现继承和接口继承 (98)4.1.2 多重继承 (99)4.1.3 结构和类 (99)4.2 实现继承 (99)4.2.2 隐藏方法 (101)4.2.3 调用函数的基类版本 (102)4.2.4 抽象类和抽象函数 (103)4.2.5 密封类和密封方法 (103)4.2.6 派生类的构造函数 (104)4.3 修饰符 (109)4.3.1 可见性修饰符 (109)4.3.2 其他修饰符 (110)4.4 接口 (111)4.4.1 定义和实现接口 (112)4.4.2 派生的接口 (116)4.5 小结 (118)第5章运算符和类型强制转换 (119)5.1 运算符 (119)5.1.1 运算符的简化操作 (120)5.1.2 三元运算符 (121)5.1.3 checked和unchecked运算符 (122)5.1.4 is运算符 (123)5.1.5 as运算符 (123)5.1.6 sizeof运算符 (123)5.1.7 typeof运算符 (124)5.1.8 可空类型和运算符 (124)5.1.9 空接合运算符 (124)5.1.10 运算符的优先级 (125)5.2 类型的安全性 (125)5.2.1 类型转换 (126)5.2.2 装箱和拆箱 (130)5.3 对象的相等比较 (130)5.3.1 引用类型的相等比较 (131)5.3.2 值类型的相等比较 (132)5.4 运算符重载 (132)5.4.1 运算符的工作方式 (133)5.4.2 运算符重载的示例:Vector结构 (134)5.5 用户定义的数据类型转换 (141)5.5.1 执行用户定义的类型转换 (142)5.5.2 多重数据类型转换 (149)5.6 小结 (152)第6章委托和事件 (153)6.1 委托 (153)6.1.1 在C#中声明委托 (154)6.1.2 在C#中使用委托 (155)6.2 匿名方法 (158)6.2.1 简单的委托示例 (159)6.2.2 BubbleSorter示例 (161)6.2.3 多播委托 (164)6.3 事件 (166)6.3.1 从客户的角度讨论事件 (167)6.3.2 生成事件 (169)6.4 小结 (173)第7章内存管理和指针 (174)7.1 后台内存管理 (174)7.1.1 值数据类型 (174)7.1.2 引用数据类型 (176)7.1.3 垃圾收集 (178)7.2 释放未托管的资源 (179)7.2.1 析构函数 (179)7.2.2 IDisposable接口 (180)7.2.3 实现IDisposable接口和析构函数 (182)7.3 不安全的代码 (183)7.3.1 指针 (183)7.3.2 指针示例PointerPlayaround.. 193 7.3.3 使用指针优化性能 (197)7.4小结 (201)第8章字符串和正则表达式 (202)8.1 System.String类 (202)8.1.1 创建字符串 (203)8.1.2 StringBuilder成员 (206)8.1.3 格式化字符串 (207)8.2 正则表达式 (213)8.2.1 正则表达式概述 (213)8.2.2 RegularExpressionsPlayaround示例 (214)8.2.3 显示结果 (216)8.2.4 匹配、组合和捕获 (218)8.3 小结 (220)第9章集合 (221)9.1 对象组 (221)9.1.1 集合 (222)9.1.2 数组列表 (225)9.1.3 Stack类 (229)9.1.4 Queue类 (231)9.1.5 SortedList类 (232)9.1.6 字典和散列表 (234)9.1.7 泛型 (243)9.2 小结 (244)第10章泛型 (245)10.1 概述 (245)10.1.1 性能 (245)10.1.2 类型安全 (246)10.1.3 二进制代码的重用 (247)10.1.4 代码的扩展 (247)10.1.5 命名约定 (248)10.2 泛型集合类 (248)10.2.1 泛型集合概述 (248)10.2.2 使用List<T>类 (251)10.2.3 使用Queue<T>类 (256)10.2.4 使用LinkedList<T>类 (260)10.3 创建定制的泛型类 (265)10.3.1 默认值 (267)10.3.2 约束 (267)10.4 泛型方法 (270)10.5 泛型委托 (272)10.6 Framework的其他泛型类型 (274)10.6.1 结构Nullable<T> (274)10.6.2 EventHandler<TEventArgs> (276)10.6.3 ArraySegment<T> (276)10.7 小结 (277)第11章反射 (278)11.1 定制特性 (278)11.1.1 编写定制特性 (279)11.1.2 定制特性示例:WhatsNewAttributes.. 28211.2 反射 (286)11.2.1 System.Type类 (286)11.2.2 TypeView示例 (288)11.2.3 Assembly类 (291)11.2.4 完成WhatsNewAttributes示例 (292)11.3 小结 (296)第12章错误和异常 (297)12.1 错误和异常处理 (297)12.1.1 异常类 (297)12.1.2 捕获异常 (299)12.1.3 用户定义的异常类 (308)12.2 小结 (316)第13章线程 (317)13.1 线程 (317)13.2 多线程应用程序 (318)13.3 线程的处理 (319)13.3.1 ThreadPlayaround示例 (322)13.3.2 线程的优先级 (325)13.3.3 同步 (326)13.4 使用ThreadPool创建线程 (330)13.5 小结 (334)第Ⅱ部分 .NET环境第14章Visual Studio 2005.. 33714.1 使用Visual Studio 2005 (337)14.1.1 创建项目 (341)14.1.2 解决方案和项目 (347)14.1.3 Windows应用程序代码 (349)14.1.4 读取Visual Studio 6项目 (350)14.1.5 项目的浏览和编码 (350)14.1.6 生成项目 (360)14.1.7 调试 (363)14.2 修订功能 (366)14.3 小结 (368)第15章程序集 (369)15.1 程序集的含义 (369)15.1.1 DLL Hell的解决方案 (370)15.1.2 程序集的特性 (370)15.1.3 应用程序域和程序集 (371)15.2 程序集的结构 (374)15.2.1 程序集的清单 (374)15.2.2 命名空间、程序集和组件 (375)15.2.3 私有程序集和共享程序集 (375)15.2.4 查看程序集 (375)15.2.5 构建程序集 (376)15.3 跨语言支持 (380)15.3.1 CTS和CLS.. 38015.3.2 语言无关性 (381)15.3.3 CLS要求 (389)15.4 全局程序集缓存 (391)15.4.1 本机图像生成器 (391)15.4.2 全局程序集缓存查看器 (392)15.4.3 全局程序集缓存工具(gacutil.exe). 39315.5 创建共享程序集 (393)15.5.1 共享程序集名 (393)15.5.2 创建共享程序集 (395)15.6 配置 (400)15.6.1 配置类别 (400)15.6.2 版本问题 (401)15.6.3 配置目录 (409)15.7 小结 (411)第16章.NET的安全性 (412)16.1 代码访问的安全性 (412)16.1.1 代码组 (413)16.1.2 代码访问权限和权限集 (419)16.1.3 策略的级别:Machine、User和Enterprise.. 42316.2 对Framework中安全性的支持 (425)16.2.1 要求权限 (426)16.2.2 请求权限 (427)16.2.3 隐式的权限 (430)16.2.4 拒绝权限 (431)16.2.5 断言权限 (432)16.2.6 创建代码访问权限 (433)16.2.7 声明的安全性 (434)16.3 安全策略的管理 (435)16.3.1 安全配置文件 (435)16.3.2 代码组和权限的管理 (438)16.3.3 安全性的启用和禁用 (438)16.3.4 重置安全策略 (439)16.3.5 代码组的创建 (439)16.3.6 代码组的删除 (440)16.3.7 代码组权限的更改 (440)16.3.8 权限集的创建和应用 (441)16.3.9 使用强名发布代码 (443)16.3.10 使用证书发布代码 (445)16.3.11 区域的管理 (449)16.4 基于角色的安全性 (451)16.4.1 Principal. 45116.4.2 Windows Principal. 45216.4.3 角色 (454)16.4.4 声明基于角色的安全性 (454)16.5 小结 (455)第17章本地化 (456)17.1 System.Globalization命名空间 (456)17.1.1 Unicode问题 (456)17.1.2 文化和区域 (457)17.1.3 使用文化 (461)17.1.4 排序 (466)17.2 资源 (467)17.2.1 创建资源文件 (468)17.2.2 资源文件生成器 (468)17.2.3 ResourceWriter. 46817.2.4 使用资源文件 (469)17.2.5 System.Resources命名空间 (474)17.3 使用Visual Studio的本地化示例 (475)17.3.1 编程修改文化 (480)17.3.2 使用定制资源文件 (481)17.3.3 资源的自动回退 (482)17.3.4 外包翻译 (482)17.4 用本地化 (483)17.5 定制的资源读取器 (485)17.5.1 创建DatabaseResourceReader类 (485)17.5.2 创建DatabaseResourceSet类 (487)17.5.3 创建DatabaseResourceManager类 (487)17.5.4 DatabaseResourceReader的客户应用程序 (488)17.6 创建定制文化 (489)17.7 小结 (489)第18章部署 (490)18.1 部署的设计 (490)18.2 部署选项 (490)18.2.1 Xcopy实用工具 (491)18.2.2 Copy Web工具 (491)18.2.3 发布Web站点 (491)18.2.4 部署项目 (491)18.2.5 ClickOnce.. 49118.3 部署的要求 (491)18.4 简单的部署 (492)18.4.1 Xcopy部署 (493)18.4.2 Xcopy和Web应用程序 (493)18.4.3 Copy Web工具 (493)18.4.4 发布Web站点 (494)18.5 Installer项目 (494)18.5.1 Windows Installer. 49518.5.2 创建安装程序 (495)18.6 ClickOnce.. 50418.6.1 ClickOnce操作 (504)18.6.2 发布应用程序 (504)18.6.3 ClickOnce设置 (505)18.6.4 应用程序缓存 (505)18.6.5 安全性 (506)18.6.6 高级选项 (506)18.7 小结 (511)第Ⅲ部分数据第19章.NET数据访问 (515)19.1 概述 (515)19.1.1 命名空间 (516)19.1.2 共享类 (516)19.1.3 数据库特定的类 (516)19.2 使用数据库连接 (517)19.2.1 管理连接字符串 (518)19.2.2 高效地使用连接 (520)19.2.3 事务处理 (522)19.3 命令 (524)19.3.1 执行命令 (525)19.3.2 调用存储过程 (528)19.4 快速数据访问:数据读取器 (531)19.5 管理数据和关系:DataSet类 (534)19.5.1 数据表 (535)19.5.2 数据列 (536)19.5.3 数据关系 (541)19.5.4 数据约束 (542)19.6 XML模式 (544)19.7 填充数据集 (552)19.7.1 用数据适配器来填充DataSet. 55219.7.2 从XML中给数据集填充数据 (553)19.8 保存对数据集的修改 (553)19.8.1 通过数据适配器进行更新 (554)19.8.2 写入XML输出结果 (556)19.9 使用 (558)19.9.1 分层开发 (558)19.9.2 生成SQL Server的键 (559)19.9.3 命名约定 (561)19.10 小结 (562)第20章.NET编程和SQL Server 2005.. 56420.1 .NET运行库的主机 (564)20.2 Microsoft.SqlServer.Server.. 56520.3 用户定义的类型 (566)20.3.1 创建UDT (566)20.3.2 使用UDT (572)20.3.3 在客户端代码中使用UDT (573)20.4 用户定义的合计函数 (574)20.4.1 创建用户定义的合计函数 (574)20.4.2 使用用户定义的合计函数 (575)20.5 存储过程 (576)20.5.1 创建存储过程 (576)20.5.2 使用存储过程 (577)20.6 用户定义的函数 (578)20.6.1 创建用户定义的函数 (578)20.6.2 使用用户定义的函数 (579)20.7 触发器 (579)20.7.1 创建触发器 (580)20.7.2 使用触发器 (581)20.8 XML数据类型 (581)20.8.1 包含XML数据的表 (582)20.8.2 数据的查询 (584)20.8.3 XML数据修改语言(XML DML). 58520.8.4 XML索引 (586)20.8.5 强类型化的XML (587)20.9 小结 (588)第21章处理XML.. 58921.1 .NET支持的XML标准 (589)21.2 System.Xml命名空间 (590)21.3 在.NET中使用MSXML (591)21.4 使用System.Xml类 (593)21.5 读写流格式的XML (593)21.5.1 使用XmlReader类 (594)21.5.2 使用XmlReader类进行验证 (597)21.5.3 使用XmlWriter类 (599)21.6 在.NET中使用DOM (601)21.7 使用XPathNavigator.. 60721.7.1 System.Xml.Xpath命名空间 (607)21.7.2 System.Xml.Xsl命名空间 (612)21.8 XML和 (617)21.8.1 将数据转换为XML文档 (617)21.8.2 把XML文档转换为数据 (624)21.8.3 读写DiffGram (626)21.9 在XML中串行化对象 (629)21.10 小结 (639)第22章使用Active Directory. 64022.1 Active Directory的体系结构 (640)22.1.1 特性 (641)22.1.2 Active Directory的概念 (641)22.1.3 Active Directory数据的特性 (645)22.1.4 模式 (645)22.2 Active Directory的管理工具 (646)22.2.1 Active Directory Users andComputers工具 (646)22.2.2 ADSI Edit工具 (647)22.3 Active Directory编程 (648)22.3.1 System.DirectoryServices命名空间中的类 (649)22.3.2 绑定 (650)22.3.3 获取目录项 (654)22.3.4 对象集合 (655)22.3.5 缓存 (656)22.3.6 创建新对象 (657)22.3.7 更新目录项 (658)22.3.8 访问内部的ADSI对象 (658)22.3.9 在Active Directory中搜索 (660)22.4 搜索用户对象 (663)22.4.1 用户界面 (663)22.4.2 获取模式命名环境 (664)22.4.3 获取User类的属性名 (665)22.4.4 搜索用户对象 (666)22.5 DSML (668)22.5.1 命名空间System.DirectoryServices.Protocols中的类 (668)22.5.2 用DSML搜索ActiveDirectory对象 (669)22.6 小结 (671)第Ⅳ部分Windows应用程序第23章Windows窗体 (675)23.1 创建Windows窗体应用程序 (675)23.2 Control类 (681)23.2.1 大小和位置 (682)23.2.2 外观 (683)23.2.3 用户交互操作 (683)23.2.4 Windows功能 (684)23.2.5 杂项功能 (685)23.3 标准控件和组件 (685)23.3.1 Button控件 (686)23.3.2 CheckBox控件 (686)23.3.3 RadioButton控件 (687)23.3.4 ComboBox控件、ListBox控件和CheckedListBox控件 (687)23.3.6 ErrorProvider组件 (690)23.3.7 HelpProvider组件 (691)23.3.8 ImageList组件 (692)23.3.9 Label控件 (692)23.3.10 ListView控件 (692)23.3.11 PictureBox控件 (694)23.3.12 ProgressBar控件 (695)23.3.13 TextBox控件、RichTextBox控件与MaskedTextBox控件 (695)23.3.14 Panel控件 (696)23.3.15 FlowLayoutPanel和TableLayoutPanel控件 (696)23.3.16 SplitContainer控件 (697)23.3.17 TabControl控件和TabPages控件 (698)23.3.18 ToolStrip控件 (698)23.3.19 MenuStrip控件 (701)23.3.21 ToolStripMenuItem控件 (701)23.3.22 ToolStripManager类 (702)23.3.23 ToolStripContainer控件 (702)23.4 窗体 (702)23.4.1 Form类 (703)23.4.2 多文档界面 (708)23.4.3 定制控件 (708)23.5 小结 (721)第24章查看.NET数据 (722)24.1 DataGridView控件 (722)24.1.1 显示列表数据 (722)24.1.2 数据源 (724)24.2 DataGridView类的层次结构 (732)24.3 数据绑定 (735)24.3.1 简单的绑定 (735)24.3.2 数据绑定对象 (735)24.4 Visual 和数据访问 (739)24.4.1 创建一个连接 (740)24.4.2 选择数据 (742)24.4.3 更新数据源 (743)24.4.4 构建模式 (743)24.4.5 其他常见的要求 (749)24.5 小结 (757)第25章使用GDI+绘图 (758)25.1 理解绘图规则 (758)25.1.1 GDI和GDI+ (758)25.1.2 绘制图形 (760)25.1.3 使用OnPaint()绘制图形 (763)25.1.4 使用剪切区域 (764)25.2 测量坐标和区域 (766)25.2.1 Point和PointF结构 (766)25.2.2 Size和SizeF结构 (767)25.2.3 Rectangle和RectangleF结构 (769)25.2.4 Region.. 77025.3 调试须知 (770)25.4 绘制可滚动的窗口 (771)25.5 世界、页面和设备坐标 (776)25.6 颜色 (777)25.6.1 红绿蓝(RGB)值 (777)25.6.2 命名的颜色 (777)25.6.3 图形显示模式和安全的调色板 (778)25.6.4 安全调色板 (779)25.7 画笔和钢笔 (779)25.7.1 画笔 (779)25.7.2 钢笔 (780)25.8 绘制图形和线条 (781)25.9 显示图像 (783)25.10 处理图像时所涉及到的问题 (785)25.11 绘制文本 (786)25.12 简单的文本示例 (787)25.13 字体和字体系列 (788)25.14 示例:枚举字体系列 (790)25.15 编辑文本文档:CapsEditor示例 (792)25.15.1 Invalidate()方法 (796)25.15.2 计算项和文档的大小 (797)25.15.3 OnPaint(). 79925.15.4 坐标转换 (800)25.15.5 响应用户的输入 (802)25.16 打印 (805)25.17 小结 (810)第Ⅴ部分Web应用程序第26章页面 (813)26.1 概述 (813)26.2 Web窗体 (814)26.2.1 代码模型 (818)26.2.2 服务器控件 (818)26.3 和数据绑定 (833)26.3.1 更新会议登记应用程序 (833)26.3.2 数据绑定的更多内容 (840)26.4 应用程序配置 (845)26.5 小结 (847)第27章开发 (848)27.1 定制控件 (848)27.1.1 用户控件 (849)27.1.2 PCSDemoSite中的用户控件 (855)27.1.3 定制控件 (856)27.2 Master页面 (860)27.3 站点导航 (864)27.4 安全性 (867)27.4.1 使用安全向导添加Forms身份验证功能 (867)27.4.2 实现登录系统 (870)27.4.3 Web 登录服务器控件 (871)27.4.4 保护目录 (872)27.4.5 PCSDemoSite中的安全性 (872)27.5 主题 (874)27.5.1 把主题应用于页面 (875)27.5.2 定义主题 (876)27.5.3 PCSDemoSite中的主题 (876)27.6 小结 (879)第Ⅵ部分通信第28章Web服务 (883)28.1 SOAP (883)28.2 WSDL (885)28.3 Web服务 (886)28.3.1 创建Web服务 (886)28.3.2 使用Web服务 (890)28.4 扩充会议登记示例 (892)28.4.1 会议登记Web服务 (892)28.4.2 会议登记客户程序 (897)28.5 使用SOAP标题交换数据 (901)28.6 小结 (906)第29章.NET Remoting.. 90829.1 .NET Remoting的含义 (908)29.1.1 应用程序类型和协议 (909)29.1.2 CLR Object Remoting.. 90929.2 .NET Remoting概述 (910)29.3 环境 (912)29.3.1 激活 (913)29.3.2 特性和属性 (913)29.3.3 环境之间的通信 (914)29.4 远程对象、客户机和服务器 (914)29.4.1 远程对象 (914)29.4.2 简单的服务器 (915)29.4.3 简单的客户机 (916)29.5 .NET Remoting体系结构 (917)29.5.1 信道 (918)29.5.2 格式标识符 (922)29.5.3 ChannelServices和RemotingConfiguration.. 922 29.5.4 对象的激活 (924)29.5.5 消息接收器 (927)29.5.6 在远程方法中传递对象 (928)29.5.7 生存期管理 (933)29.6 .NET Remoting的其他特性 (936)29.6.1 配置文件 (936)29.6.2 利用驻留远程服务器 (946)29.6.3 类、接口和Soapsuds.. 94829.6.4 异步远程调用 (949)29.6.5 .NET Remoting的安全性 (950)29.6.6 远程调用和事件 (952)29.6.7 调用环境 (958)29.7 小结 (960)第30章Enterprise Services. 96130.1 概述 (961)30.1.1 Enterprise Services简史 (961)30.1.2 使用Enterprise Services的场合 (962)30.1.3 环境 (963)30.1.4 自动的事务处理 (963)30.1.5 分布式事务处理 (963)30.1.6 对象池 (963)30.1.7 基于角色的安全性 (964)30.1.8 排队的组件 (964)30.1.9 松散藕合的事件 (964)30.1.10 没有组件的服务 (964)30.2 创建简单的COM+应用程序 (965)30.2.1 类ServicedComponent. 96530.2.2 标记程序集 (965)30.2.3 程序集的属性 (965)30.2.4 创建组件 (966)30.3 部署 (967)30.3.1 自动部署 (967)30.3.2 手工部署 (968)30.3.3 创建安装软件包 (968)30.4 Component Services浏览器 (969)30.5 客户应用程序 (971)30.6 事务处理 (971)30.6.1 ACID属性 (972)30.6.2 事务处理的属性 (972)30.6.3 事务处理的结果 (973)30.7 示例应用程序 (973)30.7.1 实体类 (974)30.7.2 OrderControl组件 (978)30.7.3 OrderData组件 (978)30.7.4 OrderLineData组件 (981)30.7.5 客户应用程序 (983)30.8 没有组件的服务 (984)30.9 小结 (986)第31章消息队列 (988)31.1 概述 (988)31.1.1 使用Message Queuing的场合 (989)31.1.2 Message Queuing特性 (990)31.2 Message Queuing产品 (990)31.3 Message Queuing结构 (991)31.3.1 消息 (991)31.3.2 消息队列 (992)31.4 Message Queuing管理工具 (992)31.4.1 创建消息队列 (992)31.4.2 消息队列属性 (993)31.5 Message Queuing的编程实现 (994)31.5.1 创建消息队列 (994)31.5.2 查找队列 (995)31.5.3 打开已知的队列 (996)31.5.4 发送消息 (997)31.5.5 接收消息 (1000)31.6 课程订单应用程序 (1002)31.6.1 课程订单类库 (1002)31.6.2 课程订单消息发送程序 (1005)31.6.3 发送优先级和可恢复的消息 (1006)31.6.4 课程订单消息接收程序 (1007)31.7 接收结果 (1010)31.7.1 确认队列 (1011)31.7.2 响应队列 (1012)31.8 事务队列 (1012)31.9 消息队列的安装 (1013)31.10 小结 (1014)第32章分布式编程的未来产品 (1015)32.1 现有技术的问题 (1015)32.2 Web服务 (1016)32.2.1 安全性 (1017)32.2.2 可靠性 (1018)32.2.3 事务处理 (1020)32.2.4 性能 (1021)32.3 WCF概述 (1023)32.4 用WCF编程 (1025)32.4.1 契约 (1025)32.4.2 服务程序的实现 (1027)32.4.3 绑定 (1028)32.4.4 主机 (1030)32.4.5 客户程序 (1031)32.5 准备使用WCF (1032)32.5.1 .NET Remoting.. 103232.5.2 Web服务 (1033)32.5.3 Enterprise Services.. 103332.5.4 Message Queuing.. 103432.6 小结 (1035)第Ⅶ部分互操作性第33章COM的互操作性 (1039)33.1 .NET和COM (1039)33.1.1 元数据 (1040)33.1.2 释放内存 (1040)33.1.3 接口 (1040)33.1.4 方法绑定 (1042)33.1.5 数据类型 (1042)33.1.6 注册 (1042)33.1.7 线程 (1043)33.1.8 错误处理 (1044)33.1.9 事件处理 (1045)33.2 编组 (1045)33.3 在.NET客户程序中使用COM组件 (1046)33.3.1 创建COM组件 (1046)33.3.2 创建Runtime CallableWrapper. 105033.3.3 线程问题 (1053)33.3.4 添加连接点 (1053)33.3.5 在Windows窗体中使用ActiveX控件 (1055)33.3.6 在中使用COM对象 (1058)33.4 在COM客户程序中使用.NET组件 (1058)33.4.1 COM Callable Wrapper. 105833.4.2 创建.NET组件 (1059)33.4.3 创建类型库 (1060)33.4.4 COM互操作特性 (1062)33.4.5 COM注册 (1065)33.4.6 创建COM客户程序 (1066)33.4.7 添加连接点 (1068)33.4.8 用sink对象创建客户程序 (1069)33.4.9 在Internet Explorer中运行Windows窗体控件 (1070)33.5 小结 (1070)第Ⅷ部分Windows基本服务第34章文件和注册表操作 (1073)34.1 管理文件系统 (1073)34.1.1 表示文件和文件夹的.NET类 (1074)34.1.2 Path类 (1077)34.1.3 示例:文件浏览器 (1077)34.2 移动、复制和删除文件 (1082)34.2.1 FilePropertiesAndMovement示例 (1082)34.2.2 示例FilePropertiesAndMovement的代码 (1083)34.3 读写文件 (1087)34.3.1 读取文件 (1087)34.3.2 写入文件 (1089)34.3.3 流 (1090)34.3.4 缓存的流 (1092)34.3.5 读写二进制文件 (1092)34.3.6 读写文本文件 (1097)34.4 读取驱动器信息 (1103)34.5 文件的安全性 (1105)34.5.1 从文件中读取ACL (1106)34.5.2 从目录中读取ACL (1107)34.5.3 添加和删除文件中的ACL项 (1109)34.6 读写注册表 (1110)34.6.1 注册表 (1111)34.6.2 .NET注册表类 (1112)34.6.3 SelfPlacingWindow示例 (1115)34.7 小结 (1121)第35章访问Internet112235.1 WebClient类 (1122)35.1.1 下载文件 (1123)35.1.2 基本的Web客户示例 (1123)35.1.3 上传文件 (1124)35.2 WebRequest类和WebResponse类 (1125)35.3 把输出结果显示为HTML页面 (1128)35.3.1 在应用程序中进行简单的Web浏览 (1128)35.3.2 启动Internet Explorer实例 (1130)35.3.3 给应用程序提供更多的IE类型特性 (1131)35.3.4 使用WebBrowser控件显示文档 (1137)35.3.5 使用WebBrowser控件打印 (1138)35.3.6 显示请求页面的代码 (1138)35.3.7 WebRequest和WebResponse的层次结构 (1140)35.4 实用工具类 (1140)35.4.1 URI. 114035.4.2 IP地址和DNS名称 (1141)35.5 较低层的协议 (1144)35.6 小结 (1150)第36章Windows服务 (1151)36.1 Windows服务 (1151)36.2 Windows服务的体系结构 (1152)36.2.1 服务程序 (1152)36.2.2 服务控制程序 (1153)36.2.3 服务配置程序 (1154)36.3 System.ServiceProcess命名空间 (1154)36.4 创建Windows服务 (1154)36.4.1 使用套接字的类库 (1155)36.4.2 TcpClient示例 (1159)36.4.3 Windows服务项目 (1160)36.4.4 线程和服务 (1166)36.4.5 服务的安装 (1166)36.4.6 安装程序 (1166)36.5 服务的监视和控制 (1171)36.5.1 MMC计算机管理 (1171)36.5.2 net.exe.. 117236.5.3 sc.exe.. 117336.5.4 Visual Studio ServerExplorer. 117336.5.5 ServiceController类 (1174)36.6 故障排除 (1179)36.6.1 交互式服务 (1180)36.6.2 事件日志 (1181)36.6.3 性能监视 (1186)36.7 电源事件 (1190)36.8 小结 (1191)前言对于开发人员来说,把C#语言及其相关环境.NET Framework描述为多年来最重要的新技术一点都不夸张。

第18章.WCF开发基础

第18章.WCF开发基础

第18章 WCF开发基础VS2008WCF(Windows Communication Foundation)是.NET Framework的扩展,WCF 提供了创建安全的、可靠的、事务服务的统一框架,WCF 整合和扩展了现有分布式系统的开发技术,如Microsoft .NET Remoting、Web Services、Web Services Enhancements (WSE)等等,来开发统一的可靠的应用程序系统。

18.1 了解WCFWCF是.NET Framework的扩展,同时WCF提供了一种在Windows环境下进行客户端开发和服务端开发的SDK,并且为服务提供了运行环境。

WCF 提供了创建安全的、可靠的、事务服务的统一框架,整合了现有的分布式技术,开发人员能够使用WCF快速创建基于服务的应用程序。

18.1.1 什么是WCFWCF是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。

WCF提供了服务的运行环境,这样就让开发人员能够将CLR类型公开为服务,也能够通过使用CLR 类型来使用服务。

WCF框架模型如图18-1所示。

457图18-1 WCF 框架模型WCF 提供了创建安全的、可靠的、事务服务的统一框架,WCF 整合和扩展了现有分布式系统的开发技术,如Microsoft .NET Remoting 、Web Services 、Web Services Enhancements (WSE)等等,来开发统一的可靠系统。

WCF 简化了SOA 框架的应用,同时也统一了Enterprise Services 、Messaging 、.NET Remoting 、Web Services 、WSE 等技术,极大的方便了开发人员进行WCF 应用程序的开发和部署,同时也降低了WCF 应用开发的复杂度。

WCF 支持大量的Web Service 标准,这些标准包括XML 、XSD 、SOAP 、Xpath 、WSDL 等标准和规范,所以对于现有的标准,开发人员能够方便的进行移植。

硬件工程师第18章

硬件工程师第18章

第18章输入设备18.1 键盘计算机系统中一种最基本的元件就是键盘,它是首要的输入设备。

它被用来将命令和数据输入系统中。

本章着眼于已存在于PC兼容系统中的键盘,并分析了键盘的不同类型、键盘的工作原理、键盘与计算机系统的接口,此外还包括了键盘疑难解答和键盘修理方面的内容。

从最初的IBM PC出现后,IBM已经为PC系统设计了三种不同的键盘,Microsoft还扩展了其中的一种。

这些设计都已经成为工业上的实际标准,事实上,这些设计被所有的PC厂商所采用。

随着Windows 95的问世,出现了一种标准101键盘的改进型号(由Microsoft设计),它被称为104键Windows键盘。

主要的键盘类型如下:·101键增强型键盘。

·104键Windows键盘。

·83键PC和XT键盘(已过时)。

·84键灯键盘(已过时)。

本章将讨论101键增强型键盘和104键Windows键盘,显示这两种键盘的布局和物理外观。

虽然还可以找到使用83键和84键键盘的旧系统,但现在很少见到这些系统。

因为现在所有的新系统都使用101和104键的键盘,所以在此仅介绍这两种类型的键盘。

注意如果需要了解更多关于83键Pc及XT键盘或者84键AT键盘的信息,那么参见本书附带的CD中的《PC升级与维护》(第10版)的第7章。

18.1.1增强型101键(或102键)键盘1986年,IBM推出了“公司”的增强型101键(或102键)键盘,该键盘用于新的XT和AT样机。

在此使用“公司”一词是因为该元件首先出现在IBM的RTPC中,该PC是为科学和工程应用设计的RISC (精简指令集计算机)系统。

实际上,该设计类型的键盘很快就被用在IBM销售的所有类型的计算机和终端上。

其他公司也很快模仿了该设计,从那时起直到1995年104键Windows键盘(本章后面讨论)的推出,该设计一直是基于Intel芯片的PC系统的标准。

第18章 远程数据调用

第18章  远程数据调用

18.2.2
访问WebService的类库
在纯粹的ActionScript 3.0开发环境下是无法进行WebService 的访问的。为了进行这种访问一般都会借助于Flex的SDK 。 Flex访问WebService的类库集中在mx.rpc.soap包下。一般情 况下最常用的类就是WebService类。
18.3
一个访问WebService的Flex应用
一个访问WebService的Flex项目,既要有访问Flex的内容, 也要有处理返回数据的方式。
18.4
LCDS简介
LiveCycle Data Service是Flex与服务端交互的组件。 LiveCycle Data Service目前只有访问J2EE服务器的版本 ,还没有访问.Net服务器的版本。
通过创建一个调用服务端Java类的Flex应用说明Remoting服 务的使用。
18.7常见面试题本章中常见的面试问题主要集中如何使用ActionScript 3.0进 行WebService调用和如何进行Remoting调用两个方面, 具体问题如下。 1.在使用ActionScript 3.0进行针对WebService的访问时设 置<mx:WebService>标签当中useProxy="false"表是什么 含义? 2.LCDS支持几种与服务端的通信方式,都是那几种?
18.4.1
LCDS的安装
下面以Windows系统为例说明如何安装LiveCycle Data Service。
18.4.2
LCDS介绍
LCDS提供了三种与服务端的基本通信方式,通过这三种通 信方式Flex可以与J2EE客户端实现非常强大数据交互功 能。

大学计算机基础实验教程

大学计算机基础实验教程
实验一 PowerPoint 2003的基本操作
实验目的
1.掌握PowerPoint 2003的启动与退出 2.熟悉PowerPoint 2003的操作环境 3.掌握演示文稿的创建、保存等基本操作 4.掌握演示文稿的基本编辑方法
返回
39
2021/8/8
第4章 PowerPoint 2003
实验一 PowerPoint 2003的基本操作
实验目的
1.掌握图表的创建方法 2.掌握对图表的编辑
返回
34
2021/8/8
第3章 Excel 2003
实验五 图表
实验内容
1.创建数据表 2.绘制图表 3. 编辑图表
⑴ 更改图表类型 ⑵ 移动图表和改变图表尺寸 ⑶ 移动和删除图表元素 ⑷ 对图表区和数据系列进行格式设置
35
返回
2021/8/8
实验二 工作表格式化
实验目的
1. 掌握工作表数据格式化的方法 2. 掌握页面设置的方法 3. 掌握条件格式的设置方法
返回
29
2021/8/8
第3章 Excel 2003
实验二 工作表格式化
实验内容
1.数据的格式化 ⑴ 设置数字格式 ⑵ 设置字体、字号、字形、颜色 ⑶ 设置对齐方式
2.单元格的格式化 ⑴ 调整行高和列宽 ⑵ 设置边框
⒊ 条件格式设置 ⒋ 页面设置
30
返回
2021/8/8
第3章 Excel 2003
实验三 公式和函数的使用
实验目的
1.掌握公式的使用方法 2.掌握函数的使用方法 3.掌握自动计算的方法
返回
31
2021/8/8
第3章 Excel 2003
实验三 公式和函数的使用

第18章 Macrowind IC版图设计软件

第18章  Macrowind IC版图设计软件

第18章M i c r o w i n d I C版图设计软件Microwind是CMOS集成电路物理层布局图(layout)设计和性能模拟软件,它包含通常使用的数字和模拟元件布局图库,布局图编辑器,参数提取分析器及布局图仿真器。

使用这个软件可以十分方便地进行IC版图设计教学,对于不具备大型IC设计软件的学生是十分有用的。

Microwind具有丰富的教学信息,例如,显示PMOS和NMOS管的特性曲线,器件尺寸,工艺参数;电路中连接线的寄生参数;所制定的模型参数可由设计者方便地进行调节,然后在屏幕上直接观察它们对元件特性的影响,并交互显示辅助指导内容。

18.1进入M i c r o w i n d与Windows下的其他程序一样,软件安装以后,创建Microwind目录,然后双击“Microwind”图标运行软件。

如图18-1所示,主窗口由布局图显示窗口、快捷图标菜单、分层调色板凳部分组成。

布局图显示窗口,其中的网格以(λ)为单位通常固定为光刻工艺技术中最小尺寸(沟道长)的一半。

例如0.8µm工艺,λ=0.4µm。

1、设计CMOS反相器以CMOS反相器为例,通过绘制其布局图学习各种命令的使用。

CMOS反相器包括一个NMOS及一个PMOS三极管,见图18-2。

图标为绘制矩形图标,图标显示调色板。

首先在调色板中选多晶硅层(红色),然后按以下步骤绘制布局图:·绘制硅栅矩形,先用鼠标器点住选定的左上角,然后拖动至右下角;·释放鼠标器,即得到一定尺寸的硅栅矩形图,应使得矩形宽度最小为2λ,见图18-3;·按图18-4的比例继续绘制硅栅层;·选择调色板中N+扩散层(绿色),按图18-5(下)绘制NMOS部分;·选择调色板中P+扩散层(绿色,斜线),按图18-5(上)绘制PMOS部分;·选择调色板中N-阱层,在图18-5的P扩散层周围添置N阱,如图18-6。

14.漫谈兼容内核之十四:Windows的跨进程操作

14.漫谈兼容内核之十四:Windows的跨进程操作
漫谈兼容内核之十四漫谈兼容内核之十四漫谈兼容内核之十四漫谈兼容内核之十四 毛德操 Jeffrey Richter 在他的“Advanced Windows”一书第 18 章“打破进程壁垒(Breaking Through Process Boundary Walls) ”中讲述了一个有趣的实验,就是利用 OpenProcess()、 CreateRemoteThread()、VirtualAllocEx()、WriteProcessMemory()等等 Win32 API 函数从一个 进程向另一个进程的用户空间“注入(Inject)”一个 DLL。其过程大致如下: 给定目标进程的进程号 PID,通过 OpenProcess()“打开”这个进程,得到代表着目 标进程“对象”的 Handle。OpenProcess()的基础是系统调用 NtOpenProcess()。 通过 VirtualAllocEx()在目标进程的用户空间分配一块内存。VirtualAllocEx()的基础 是系统调用 NtAllocateVirtualMemory()。 通过 WriteProcessMemory()把一些代码和数据拷贝到目标进程用户空间中刚分配的 那块内存中,这些代码的入口为 ThreadFunc()。WriteProcessMemory()的基础是系 统调用 NtWriteVirtualMemory()。 通过 CreateRemoteThread()在目标进程中创建一个以 ThreadFunc()为入口的线程。 CreateRemoteThread()的基础是系统调用 NtCreateThread()。 当目标进程中的线程 ThreadFunc()受调度运行时,就把预定的 DLL 装入目标进程 的用户空间。 然后线程 ThreadFunc()退出运行而不复存在,但是所装入(并连接)的 DLL 却留在了 目标进程的用户空间。 当然,这是个很有趣的实验,利用这个实验所揭示的特点也许可以开发出某些很好的应 用。但是问题也随之而生:要是 ThreadFunc()是一段木马程序呢?比方说,要是这里的目标 进程是网络浏览器,而 ThreadFunc()每当受调度运行时就把本地的某些信息发送给某个网 站,然后睡眠一段时间,如此周而复始呢?显然,只要那个被 ThreadFunc()“附体”的网络 浏览器进程还在运行,这段木马程序就可周期性地得到执行,而很难被察觉。 笔者在以前的漫谈中曾经讲过,Windows 与 Linux 的一个很明显、很重要的区别就是: 在 Windows 中一个进程可以越俎代庖地替别的进程做好多事,其中就包括上面讲到的几项 跨进程操作。我们在创建 Windows 进程、启动 PE 映像执行的过程中也看到过一些跨进程的 操作,例如把可执行映像映射到子进程的用户空间、在子进程的映像中寻找函数入口、为子 进程创建线程等等。除直接的跨进程操作外,还可以跨进程复制已打开对象的 Handle。而 Linux,则是不允许、或者说不提供此类跨进程操作的。而且,正是这方面的差异使得 Wine 的“核内差异核外补”策略难以有效实施。 相比之下,Linux 进程是“独立自主”的。当然,Linux 也有进程间通信,但那只是通 信而已。在进程间通信的基础上,一个进程也可以应另一个进程的请求而在其自身的上下文 中执行某些操作。但是那些操作都是预定的、预先就安排在这个进程的代码中的,所反映的 是程序设计者的意志。从这个意义上说,除非程序中有错误(bug),Linux 进程的行为是可预 测的。而 Windows 进程则有可能发生不可预测的行为,因为别的进程居然可以把一段程序 “注入”其空间并使之成为一个线程而得到执行。 可想而知,要是允许这样的跨进程操作不受限制地进行,对于系统的安全性是影响极大 的,所以必定要有安全措施配套才行。 对于这么重要的问题,我们当然希望能了解 Windows 的跨进程操作和相应的安全措施

第18章(11)教材配套课件

第18章(11)教材配套课件
10
图18-4
11
由于该漏洞是针对于Adobe应用程序的漏洞,所以对内部 服务器的影响不大。为了排除内部网站服务器被恶意控制的可 能性,再来分析被请求的文件是否正常。我们下载了该文件, 并且对其进行病毒查杀,并未发现任何异常,见图18-5和18-6。
12
图18-5
13
图18-6
14
我们又下载了几个上报该问题IP的数据包进行分析,发现 其他IP多是对该网站的爬站行为,请求到 “/xxxxx137.pdf”链接时发生报警(如图18-7 所示为Google对该网站爬站)。
15
图18-7
16
为了验证IPS上报的准确性,我们下载该文件,查看IPS的 处理行为,如图18-8和图18-9所示。
17
图18-8
18
图18-9
19
我们从互联网上下载该PDF文件,看到IPS上报由内到外 的(APSB11-24)Adobe Acrobat/Reader BMP处理远程栈缓冲区溢 出攻击,目的地址为1.203.32.11(本机IP地址),而我们的操作 仅仅是从外网正常地下载了正常的文件,所以证明该项警报为 误报。
4
图18-1
5

通过上图我们可以发现,该IP的访问时段比较集中,主要 发生在夜间和凌晨。我们下载数据包对其进行精细分析,见图 18-2。
查看“TCP会话”视图发现,183.16.212.65与内部服务器 通信的TCP会话全部是由183.16.212.65发起连接,并访问服务 器的80端口(如图18-2),所以IPS上报的由内到外的攻击是属于 误报。
第18章 通过网络分析验证 IPS设备误报
➢18.1 故障描述 ➢18.2 故障分析 ➢18.3 分析结论及建议

联想 ideapad MIIX 510-12ISK MIIX 510-12ISK LTE 使用说明书

联想 ideapad MIIX 510-12ISK MIIX 510-12ISK LTE 使用说明书

Lenovo ideapad MIIX 510-12ISK MIIX 510-12ISK LTE 使用说明书•注释在使用本产品之前,请先阅读《联想安全及通用信息指南》。

•本指南中的某些说明可能假设您所使用的是 Windows® 10。

如果您使用的是其它 Windows 操作系统,某些操作可能会稍有不同。

如果您使用的是其它操作系统,则某些操作可能不适合您。

•说明书描述的是多数机型具备的通用功能。

您的计算机可能没有其中某些功能,或者说明书中没有介绍您的计算机上的某些功能。

本手册中的插图可能与实际产品不同。

操作系统截图仅供参考。

请以实物为准。

温馨提示:您可以随时访问联想官方网站()以获得快捷的网络支持服务:点击“驱动下载专区”然后输入您的主机编号或机型,即可查询机器的配置、保修和相应的驱动程序信息;点击“维修网点”然后选择您所在的城市与您的产品,即可查询当地的服务网点信息以便于您送修平板电脑!谢谢!第一版(2016年7月)© 版权所有联想 2016。

•目录第1章认识您的计算机 (1)正视图 (1)左视图 (3)右视图 (4)顶视图 (5)底视图 (6)后视图 (7)使用后盖支架板 (8)键盘底座正视图 (10)第2章开始使用 Windows 10 (18)首次配置操作系统 (18)操作系统界面 (18)使计算机进入睡眠状态或关机 (21)触摸屏操作 (23)连接至无线网络 (26)获取Windows帮助 (27)第3章恢复系统 (28)第4章故障排除 (30)常见问题 (30)故障排除 (31)附录A 产品特殊声明 (34)“能源之星”型号信息 (34)商标 (35)第1章认识您的计算机正视图----------------------------------------------------------------------------------------------------------------------------------a前置摄像头使用此摄像头进行视频交流或拍照。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第18章创建Windows程序第18章将对已经介绍过的技术进行巩固,并示范如何使用这些技术来开发实际的程序。

本章中的第一个程序是Rich Text编辑器。

之所以选择这个例子,是因为在第14章中您已经熟悉了RichEdit控件;这里将着重强调Delphi为开发Windows程序所提供的各种支持。

本章中的应用程序并不难于开发,但却足以用于讨论应用程序开发的许多方面。

而且Delphi 6引入了TAction组件,可以有效地减少所需编写代码的数量。

由于前面的章节并未涵盖TActionList和TAction组件,本章将介绍这两个新的组件。

另外,在示例程序中使用了MDI(多文档界面),前面的章节也没有涉及到。

为演示如何建立RichEditor.exe例子程序,我们在本章中将涵盖如下内容:分析与设计、工程的准备工作、MDI的使用、Windows注册表的管理、添加帮助文档,以及部署程序的准备工作。

读完本章后,您可以全面了解Delphi所提供的工具,以及一些可用于支持开发具有专业水准应用程序的工具。

18.1 准备工作工程的准备工作有许多种形式。

如果要建立原型,那么只要启动Delphi并了解要建立什么原型即可。

在开发不太复杂的应用程序时,如本章中的例子,对工作进行一下综述也就足够了。

如果开发的应用程序只供自己使用,可以跳过这一步。

如果程序是供内部合作使用或为客户开发的,那么对工作陈述一下也就可以了。

比本章中的RichEditor更为复杂的程序,都至少需要进行文档化的、正式的分析与设计。

不幸的是,事实刚好相反。

许多程序都只是由管理者和程序员开发的,其中缺少一些必要的角色,如体系结构设计师、分析人员、设计人员、产品经理、工程经理、测试人员、质量保证负责人、文档专家、工具建立者、以及库管理人员。

想像一下,如果航班没有行李管理人员、旅行代理人、售票代理人、保安人员、飞行员、副驾驶员、领航员、以及服务人员,那会出现什么样的混乱。

当开发复杂软件时,每个人可能会担任多个角色,但是像体系结构设计师和工程经理这样的角色,其责任实在重大,所以要确保每个这样的角色至少由一个人来担任。

对于体系结构设计师来说,由一个人建立的单一而一致的概念化模型可能是最好的。

程序员开发RichEditor程序的复杂程度,与飞行员驾驶单引擎小飞机相似。

大多数情况下,一个单人小组即可完成工作。

但是要谨慎,组织和计划即使对于第18章创建Windows程序单人小组也是很重要的。

对于我们的简单例子程序,单个人就能够担任所有的角色。

对工作进行一下陈述也就足够了。

可以把工作描述为:“实现文本编辑器,能够同时读写多个Rich Text或DOS Text格式的文档。

”注意:如果您所在的工程不只一个人,那么使用版本控制产品并形成一致的目录结构是很重要的,这样可以有效地减少协作者之间的问题,还可以加快新人融入到团队的转变过程。

随着时间过去,任何可以减轻工作负担的措施都会得到回报,即使非常简单的应用程序也是如此。

 对于我们的简单程序来说,最后一点就是要组装有用的目录结构,并实现版本控制机制。

基本的目录结构对于工程的组装是很有帮助的。

18.1.1 大有帮助的简单工作当与其他开发者一同工作时,或同时开发多个工程时,基本的目录结构可以有效地减少迷惑。

RichEditor的目录结构以目录树的形式如下列出。

-RichEditor-Bin-Documents-Help-Output-Source-VCL当然,您可以使用任何目录结构,只要适合需求即可。

但选定一种目录结构并保证一致的使用,可以减少源代码文件的混乱,而且Delphi还支持在多个目录进行不同的输出。

Bin目录在RichEditor工程中用于编译过的可执行文件,本例中RichEditor.exe在编译后将写入到Bin子目录。

Output目录用于存储编译过的单元,即.DCU文件,将其与源文件隔离开来。

源代码文件将存储在Source子目录中。

18.1.2 版本控制版本控制机制会跟踪源代码相对于时间的演化。

您可以将单独的文件或整个的应用程序回复到以前的版本。

有些产品还可以将缺陷与源代码关联起来,维护问题出现和解决时的线程信息。

如果没有版本控制程序,您可以买一个。

有许多可以选择的产品。

高端产品包括Harvest、Clearcase和PVCS。

低端和中级产品包括SourceSafe和StarTeam。

所有这些产品都提供了基本的能力,可以将您的工作随时间的演化存储为多个版本。

注意:Starbase公司的StarTeam是相对较新的产品,包括服务器、桌面客户、Web界面,提供了源代码管理、缺陷跟踪和线程信息功能。

 对于RichEditor,使用了Microsoft的SourceSafe产品。

它相对较为便宜,并容易得到。

SourceSafe的工作方式与Windows文件系统非常相似。

可以将程序中的所有目录和文件都添加到SourceSafe。

然后SourceSafe将对源代码(或其他检入的文件)进行写保护。

当您打算修改文件时,可以检出这些文件。

本质上,检出文件将把文件复制到本地驱动器并使之可写。

注意:对于您所使用的产品,请查询用户指南。

不幸的是,即使是版本控制机制也并未一致采用。

它需要软件过程管理机制的支持,许多开发团队尚未使用源代码控制机制。

因此,关于如何使用源代码控制程序的书籍也相对较少。

实际上,只要人需要在计算机上进行脑力工作,那么任何行业都需要版本控制产品,如律师、法律书记人员和图形艺术家。

 通过使用诸如StarTeam和SourceSafe之类的版本控制产品,可以避免在不注意的情况下修改或删除文件,并阻止可能出现的并发修改,排除代价高昂的改动丢失情况。

18.2 开发中的Delphi工程选项在开发过程中,Delphi的IDE中的工程选项可以进行限制性最强的设置。

这使得Delphi能够尽早的帮助发现和解决问题。

Project Option对话框包括许多属性页,其中有许多有用的选项,有助于工程的一般组织并可以向每个应用程序添加特定于工程的细节。

18.2.1 应用设置Project Option对话框的Application属性页可用于指定应用程序的标题、帮助文件的位置,以及工程的图标。

应用程序的标题是Rich Text Editor,并选定了一个合适的图标。

可以使用Browse按钮来指定帮助文件。

这些选项被编码到工程的.DPR文件中,如下所示。

Application.HelpFile := 'E:\Books\Osborne\Delphi 6 Developer''s Guide\Chapter18\Examples\RichEditor\Help\RichEditor\RICHEDITOR.HLP';请记住,设计时的环境可能无法映像到部署环境。

实际上部署环境是无法预测的,因此诸如帮助文件路径的信息必须通过编程动态确定。

在主窗体的FormCreate事件中添加下面的代码,即可解决该问题。

Application.HelpFile := ExtractFilePath(Application.EXEName) + 'RichEditor.hlp';除了要编写代码来动态解析帮助文件的路径之外,需要把动态信息存储到注册表或.INI文件中。

RichEditor.exe程序使用了注册表。

图18.1 程序开发过程中的Compiler选项设置图示一项很好的标准是解决所有以前编译器提示、警告或错误的代码。

另外,可以注意到(见图18.1)Message选项Show Hints和Show Warnings 均被选中。

在发布程序或VCL组件之前解决所有的编译器提示和警告是个好习惯。

编译器提示和警告越早越容易解决。

提示和警告实际上是潜在的错误,在其演变成错误之前较为容易解决。

18.2.4 加入版本信息Project Option对话框的Version Info属性页可用于向应用程序加入内部版本信息。

选中Include version information in project复选框以及Auto-increment build number选项,每次选择Project Build菜单项时,编译器将自动更新程序的Build号码并存储版本信息。

Version info属性页底部的Key和Value表格可以在程序中对版权、商标、版本信息以及自定义数据等进行编码。

在File Properties对话框的Version属性页上可以看到该信息。

Major、Minor、Release、Build号码是由About对话框上的TVersionLabel控件使用的,用于自动更新程序的版本和建立信息(使用TVersionLabel组件的源代码,请参见第10章)。

18.2.5 在RichEditor工程中指定目录和条件选项协调工程目录、源代码控制目录、文件物理位置最简单的方法是对三者使用相同的路径。

有时候懒一点也是有好处的。

注意:也许您听说过关于某些罕见的程序员的神话,他们编程的速度比平均速度快上十倍。

这种人确实存在。

他们像西部片中的枪手一样傲慢地迈着方步,仿佛有某些秘密一样。

他们成功的秘密在于习惯。

超级程序员所做的大部分事情都是纯粹、几乎不经大脑的习惯。

他们有一种内部的风格指南,你可以认为这是一种地图,大部分时候都可以告诉他们做什么。

如果还有余下18.3 建立主窗体对工作的描述表明了RichEditor必须能够同时编辑多个Rich Text或文本文件。

对于多个文档的编辑,较为理想的是多文档界面(MDI)协议,我们将在稍后讨论MDI。

该程序是Windows程序,而且是编辑器。

因此,它需要一个主菜单。

大部分用户都需要工具栏和状态栏,因此还要向程序添加工具栏和状态栏。

TTimer组件的OnTimer事件用于按固定的时间间隔更新状态栏,而且将使用新的TAction组件来提供基本的文件输入/输出、编辑菜单、字体格式化等功能。

注意:当程序随时间演化时,请记住开发者的首要目标是尽可能少写代码。

由于我是个喜欢编写代码的人,因此我必须在编写代码的乐趣与经常存在的业务方面的需求进行协调,以避免编写太多的代码。

“请记住,成功的开发者只需编写少量的高质量代码,而不是大量普通的代码(Booch,1996)。

” 到现在为止,我们还没有讨论过MDI程序,本节我们将从创建窗体开始,自顶向下进行工作,最后分别以状态栏和TApplication组件结束。

18.3.1 多文档界面MDI是指可以在一个父窗口中打开多个子窗口。

它与单文档界面(SDI)程序相对,后者是基本的Windows风格的程序。

MDI多用于字处理和电子表格程序,其中用户需要同时在多个文档上工作,对于程序员来说,子窗体是与用户每次工作的文档或工作表相对应的。

相关文档
最新文档