《Delphi 4编程技术内幕》求取 ⇩

译者序1

第一部分入门1

第1章 程序设计基础1

1.1 本书的结构2

1.2 范例程序4

1.3 创建设计良好的程序4

1.3.1 设计问题:书写简单的代码4

1.3.3 好OOP与差OOP的对比5

1.3.2 螺旋式上升5

1.3.4 注意灵活的事件处理程序6

1.3.5 感到懒于理清程序的环节7

1.3.6 避免使用隐藏数据交叉链接对象8

1.3.7 简短的方法9

1.3.8 变量、方法以及过程的命名10

1.3.9 避免特征漂移10

1.3.10 创建组件10

1.3.11 使用第三方工具11

1.4.1 Unleash和Merc40包12

1.4 本书正文的注意事项12

1.4.2 CodeBox单元13

1.4.3 建立网络13

1.4.4 Borland/Inprise的名称变化13

1.4.5 注释代码14

1.5 总结14

第2章 IDE和VCL增强15

2.1 可停放的工具栏15

2.2 使用工具窗口16

2.3 使用Code Explorer18

2.4 Delphi4中的新工具21

2.4.1 使用Project Manager和调试器21

2.4.2 调试DLL22

2.4.3 使用模块视图23

2.4.4 使用事件日志窗口23

2.4.5 CPU视图24

2.4.5 调试器中的新特征25

2.4.6 Code Browser和Tooltip Symbol Insight26

2.5 停靠窗口26

2.5.1 在窗体中停放控件27

2.5.2 在窗体中停放窗体28

2.6 动作列表31

2.6.1 使用动作列表31

2.6.2 使用标准动作35

2.7 函数重载35

2.7.1 方法重载和继承38

2.7.2 使用方法重载时要避免的错误40

2.7.3 默认参数42

2.8 动态数组43

2.9 implements关键字46

2.10 总结48

第3章 多态性49

3.1 多态性的概念49

3.1.1 赋值和等于的比较49

3.1.2 多态性的简单例子50

3.2 多态性赋值能力51

3.2.1 设置子对象适合于它们的父对象51

3.2.2 多态性的另一面52

3.3 虚方法和多态性53

3.3.1 经典的形状演示56

3.3.2 没有多态性的代码62

3.4 VCL中的多态性63

3.5 总结65

第4章 异常处理66

4.1 本章如何处理异常67

4.2 异常的理论67

4.2.1 异常的功能67

4.2.2 默认异常处理程序68

4.2.3 整个程序是一个大try块69

4.2.4 未处理异常引起的恐慌69

4.3 异常类70

4.4 基本异常句法71

4.4.1 一个简单的try.except模块74

4.4.2 异常的关联错误字符串75

4.4.3 找到错误的地址76

4.4.4 异常处理总结77

4.5 引发异常77

4.5.1 引发VCL异常类79

4.5.2 理解VCL异常类81

4.5.3 运行Gauntlet:多异常类82

4.5.4 在常规except语句中捕获异常83

4.6 创建和引发自己的异常83

4.7 再引发异常87

4.8 try..finally块88

4.9 流、异常和空闲空间91

4.10 替换默认的异常处理程序95

4.11 使用资源跟踪错误字符串97

4.12 总结101

第5章 线程102

5.1 进程和内存103

5.1.1 线程与多任务104

5.1.2 抢占式与非抢占式多任务106

5.2 线程:一个简单的例子106

5.3 多线程程序111

5.3.2 向线程函数传递一个参数115

5.3.1 在Thread2程序中使用线程115

5.3.3 临界区:让多个线程同时工作117

5.4 处理互斥元122

5.5 线程和VCL126

5.6 线程安全数据库访问127

5.7 VCL线程安全对象128

5.8 使用TThread对象128

5.9 设置线程的优先级137

5.10 重访Delphi线程142

5.11 总结143

第二部分创建组件145

第6章 创建组件(一)145

6.1 组件原理146

6.2 创建现存组件的派生组件146

6.2.1 创建简单的组件146

6.2.2 双向工具150

6.2.3 注册组件151

6.2.4 改变组件的默认行为151

6.2.5 动态创建并检查组件152

6.3.1 什么是包153

6.3 包:将组件放入Component Palette中153

6.3.2 创建包154

6.4 扩展Unleash单元156

6.4.1 TCCBigEdit和TCCEmptyPanel控件166

6.4.2 创建复合组件166

6.4.3 创建组件的published属性169

6.4.4 流属性的注意事项170

6.5 创建真正有用的组件171

6.6 总结175

第7章 创建组件:(二)177

7.1 从头开始建立组件178

7.2 时钟组件180

7.2.1 了解TCCClock189

7.2.2 TCCColorClock191

7.2.3 创建Fancy Clock192

7.3 为组件创建图标195

7.4 Tools API:Property Editor和Component Editor196

7.4.1 五个主要的Tools API196

7.4.2 Property Editor196

7.4.3 关于注册你自己的组件以及Commponent Editor的更多知识199

7.4 Commponent Editor200

7.5 不可视的组件201

7.6 FindAIlW程序202

7.6.1 使用TFileIterator遍历目录213

7.6.2 什么时候应该把对象做成不可见组件215

7.6.3 AJIDirs单元和FileIter单元216

7.6.4 遍历目录216

7.6.5 使用FindFirst、FindNext和FindClose217

7.6.6 创建事件处理程序218

7.7 CompDirs程序220

7.8 TCCPickDirDIg226

7.9 组件模板231

7.10 ActiveX控件232

7.11 总结235

第三部分数据库编程237

第8章 字段和数据库工具237

8.1 从关系数据库开始238

8.1.1 关系数据库模型的优势239

8.1.2 简单的逻辑设置:关系数据库的基础239

8.1.3 DBD和Database Explorer中的索引和关键字240

8.2 重点规则:给每个表建立一个关键字243

8.2.1 一对多的关系:数据和索引244

8.2.2 用主关键字和主索引工作245

8.2.3 用副索引和外部关键字工作246

8.2.4 关键字的重要性246

8.3 用数据库工具浏览和操作数据库247

8.3.1 浏览DBDEMOS数据库的关键字和索引247

8.3.2 用Database Desktop创建索引250

8.3.3 创建别名250

8.3.4 使用Database Desktop创建主关键字和外部关键字251

8.3.5 探究引用完整性252

8.3.6 关系数据库和联结253

8.3.7 联结和QBE254

8.4 Flieds Editor255

8.5 计算字段259

8.6 运行期间的TDBGrid260

8.6.1 在运行中控制DBGrid的Options属性263

8.6.2 运行时显示DBGrid选项264

8.7.1 改变TDBGird对象的标题265

8.7 使用TDBGrid列265

8.7.2 改变网格里的整列266

8.7.3 改变网格里一行的颜色267

8.7.4 改变列宽268

8.7.5 在TDBGrid里隐藏列268

8.7.6 显示可见字段的列表269

8.7.7 运行时移动列270

8.8 查找字段270

8.10 总结276

8.9 多记录对象276

第9章 平面文件现实世界数据库278

9.1 本章示例程序279

9.2 设计应用程序279

9.2.1 定义数据280

9.2.2 程序设计的焦点282

9.3 定义程序的外观284

9.4 查找:处理Category字段286

9.5 设置程序的命令结构287

9.6 查看应用程序的“粗略草稿”289

9.7 创建自己的对象290

9.8 创建最终的程序291

9.9 切换进和切换出只读模式309

9.10 排序数据311

9.11 查询数据313

9.12 筛选数据314

9.13 标记文件315

9.14 设置颜色317

9.15 使用注册表320

9.16 剪贴板:剪切、复制和粘贴323

9.17 总结323

第10章 关系式数据库324

10.1 现实世界的数据324

10.2 测试关联地址程序325

10.3 kaAdd代码328

10.3.1 使用kdAdd程序338

10.3.2 为kdAdd建立索引338

10.3.3 查询记录339

10.3.4 插入数据和取消操作340

10.3.5 删除数据:程序的数据模块初览341

10.3.6 数据模块:级联删除343

10.3.7 数据模块:总体登记345

10.3.8 在字符串资源中加入错误字符串345

10.3.9 About框346

10.4 使用kdAddExplore和谐程序346

10.4.1 使用TSession347

10.4.2 kdAddExplore程序的代码349

10.4.3 用TTree View显示系统数据库355

10.4.4 展开TTree View节点356

10.4.5 为TTree View加入可用表的列表356

10.4.6 找到索引和字段358

10.4.7 显示别名和别名参数359

10.5 总结360

第11章 使用本地InterBase服务器361

11.1 从InterBase开始361

11.1.1 数据库和工作市场362

11.1.2 设置本地InterBase362

11.1.3 设置InterBase别名365

11.2 创建数据库366

11.2.1 使用WISQL367

11.2.2 创建表367

11.3 利用WISQL管理数据库368

11.4 事务处理370

11.4.1 创建TRANSACT程序370

11.4.2 使用TRANSACT程序371

11.4.3 理解事务处理372

11.5 高速缓存更新373

11.6 多对多关系378

11.7 安全和InterBase Server Manager387

11.7.1 定义表的访问权力388

11.7.2 利用InterBase Server Manager备份表388

11.8 总结389

第12章 InterBase编程390

12.1 关于Music程序391

12.2 设计Music程序392

12.2.2 修改表:空或非空393

12.2.1 创建数据库方案393

12.2.3 重新命名现有表中的字段394

12.2.4 创建Blob字段395

12.2.5 主关键字和外部关键字396

12.3 在Music表创建索引398

12.4 生成器、触发器和存储过程399

12.4.1 不要在活动索引上使用触发器400

12.4.2 使用存储过程401

12.4.3 来自Delphi端的存储过程402

12.5 服务器端规划和客户端规则403

12.6 Music程序界面概述404

12.7 使用子窗体405

12.8 Music程序的代码408

12.8.1 使用Music程序408

12.8.2 禁止密码:TdataBase对象408

12.8.3 FormCreate事件408

12.9 使用Music程序中的数据411

12.10 向数据库提出一个问题:简短的SQL入门412

12.10.1 不返回数据集合的存储过程416

12.10.2 查看数据范围417

12.11 总结418

第四部分COM419

第13章 COM接口和基础419

13.1 理解COM接口419

13.1.1 COM是什么?420

13.1.2 COM和窗口420

13.1.3 即插即用应用程序420

13.1.4 COM的问题421

13.1.5 UNIX上的COM422

13.1.6 COM+和COM的未来423

13.2 接口介绍423

13.2.1 新接口类型423

13.2.2 接口不是类424

13.2.3 不能直接实现接口424

13.2.4 利用类实现接口425

13.2.5 调用接口的方法428

13.2.6 破坏接口429

13.3 接口背后的理论432

13.3.1 使用接口的原因433

13.3.2 维护或更新接口435

13.4 创建和使用COM接口435

13.4.1 理解GUID436

13.4.2 关于注册表和GUID所有内容437

13.4.3 理解IUnknown440

13.4.4 实现IUnknown445

13.4.5 为接口指定GUID447

13.4.6 幻数448

13.4.7 UnknownByUser程序的注释449

13.5 高级接口问题450

13.5.1 多个接口451

13.5.2 方法解析语句454

13.5.3 Implements伪指令455

13.5.4 虚方法表458

13.6 总结458

第14章 TComObject、TTypedComObject以及类型库460

14.1 样例程序460

14.2 TComObject460

14.2.1 在DLL中放置普通接口461

14.2.2 IClassFactory469

14.2.3 ISystemInfo接口470

14.2.4 注册DLL470

14.2.5 从可执行文件访问存储在DLL中的COM对象471

14.2.6 越过程序边界编组数据472

14.2.7 编组数据473

14.2.8 Variant数组473

14.2.9 调用ISystemInfo数据479

14.3 类型库和查询对象482

14.3.1 创建类型库483

14.3.2 创建查询类型库的客户程序488

14.3.3 检索ITypeInfo491

14.3.4 获取接口信息494

14.4 总结495

第15章 创建COM自动化服务器和客户程序496

15.1 理解OLE自动化客户程序和服务器496

15.2 建立简单的COM服务器和客户程序497

15.2.1 建造简单的服务器497

15.2.2 在服务器上添加方法498

15.2.3 查看生成的源代码499

15.2.4 添加接口属性500

15.2.5 建立简单客户程序500

15.2.6 通过TCOMInterface来调用方法504

15.2.7 通过dispinterface调用方法505

15.3 IDispatch、双重接口和dispinterface507

15.3.1 从Word调用SimpleAutoServer508

15.3.2 VTable和双重接口509

15.4 类型库510

15.4.2 创建类型库511

15.4.1 什么是类型库511

15.4.3 有效的自动化类型512

15.5 用EmptyParam忽略参数512

15.6 注册513

15.7 自动编组数据515

15.8 从一个CoClass得到两个或更多的接口515

15.9 总结526

第16章 用Delphi完成Word和Excel自动化527

16.1 自动化Office应用程序的系统要求527

16.2.1 启动Excel528

16.2 启动Delphi和Excel528

16.2.2 使用COMObj529

16.2.3 了解Excel的简单自动化530

16.2.4 比较接口和Variant530

16.2.5 理解CreateOleObject531

16.2.6 Variant和类型532

16.2.4 创建Excet自动对象532

16.3 了解Excel自动化对象533

16.3.1 在Application对象内访问各种对象534

16.3.2 使用自动化535

16.4 在Excel和Word间共享图表543

16.4.1 创建电子表格546

16.4.2 创建图表547

16.4.3 使用SeriesCollection对象548

16.5 从Excel向Word复制数据550

16.5.1 Word内部的自动化551

16.5.2 发送文档553

16.6 总结553

17.1 Variant与接口的对比555

第17章 接口和Internet Explorer555

第五部分Internet编程555

17.1.1 补救接口556

17.1.2 使用类型库557

17.2 本章所需文件557

17.3 使用Word和Excel558

17.3.1 使用Excel和Word接口565

17.3.2 比较Variant和接口技术566

17.4.1 开始:访问Web Page中的元素568

17.4 使用IE和TwebBrowser568

17.4.2 运行时在浏览器上处理HTML574

17.5 在浏览器内放置ActiveX控件581

17.6 总结588

第18章 WebBroker:CGI和ISAPI589

18.1 Web Module589

18.2 Web Server Application Wizard589

18.2.1 CGI590

18.2.2 WinCGI590

18.3 WebBroker组件591

18.2.3 ISAPI/NSAPI591

18.2.4 CGI与ISAPI591

18.3.1 TWebModule592

18.3.2 TWebResponse593

18.3.3 TWebRequest593

18.4 IntraBob594

18.5 TPageProducer596

18.6 TDataSetPageProducer598

18.7 浏览状态601

18.7.3 隐含字段602

18.7.1 Fat URL602

18.7.2 Cookie602

18.8 高级网页的生成605

18.9 TDataSetTableProducer610

18.10 Database Web Application Wizard613

18.11 TQuery TableProducer613

18.12 总结617

19.1 理解WinINet、FTP和TCP/IP618

19.1.1 所需文件618

第19章 WindINet和FTP618

19.1.2 确保FTP在系统中运行619

19.1.3 安装TCP/IP应该注意的问题619

19.2 FTP使用WindINet622

19.2.1 使用InternetOpen624

19.2.2 使用InternetConnect624

19.2.3 获得当前目录626

19.2.4 在目录中查找文件(一)626

19.2.5 在目录中查找文件(二)628

19.2.6 检索文件(一)630

19.2.7 创建回调631

19.2.8 检索文件(一)635

19.2.9 发送文件到服务器的简单方法637

19.2.10 删除文件637

19.2.11 创建和删除目录638

19.3 在程序中使用FTP控件639

19.3.1 连接程序器647

19.3.2 响应OnNewDir事件648

19.3.3 改变目录648

19.3.4 跟踪文件传送649

19.4 总结651

第六部分分布式编程653

第20章 DCOM653

20.1 COM和分布式体系结构653

20.1.1 什么是DCOM653

20.1.2 在Windows 95/98和Windows NT上运行DCOM服务器654

20.1.3 作为DCOM服务器使用Windows 98656

20.2 简单的DCOM客户程序和服务器656

20.2.2 理解Safecall657

20.2.1 建立服务器657

20.2.3 机器之间编组数据658

20.2.4 创建DCOM客户程序662

20.2.5 使用远程对象670

20.3 再访问SystemInformation程序670

20.4 轻量远程数据集677

20.4.1 理解DataCOMServer程序685

20.4.2 访问远程数据集的DataCOMClient689

20.4.3 理解DataCOMClient694

20.4.4 编辑数据行696

20.5 程序数据和自动化数据697

20.6 测试远程调试系统702

20.7 总结703

第21章 MIDAS704

21.1 多层计算概述704

21.1.1 什么是MIDAS705

21.1.2 分布式计算的目的706

21.1.3 公文包模型概述706

21.1.5 查找调度程序707

21.1.4 术语707

21.2.1 建立简单的MIDAS应用程序709

21.2.2 创建SimpleMidasServer714

21.2.3 理解服务器715

21.2.4 导出TProvider接口715

21.2.5 为客户应用程序准备服务器716

21.2.6 创建简单的MIDAS客户程序717

21.2.7 理解简单的MIDAS客户程序718

21.2.8 远程访问服务器718

21.2.9 使用套接字代替DCOM719

21.3 建立一对多应用程序720

21.4 建立远程数据客户应用程序722

21.4.1 更新和刷新数据725

21.4.2 公文包模型726

21.4.3 PacketRecords727

21.5 错误处理728

21.6 服务器端逻辑与客户端逻辑729

21.7 所需的DLL731

21.8 使用OLEnterprise732

21.9 总结733

第22章 ActiveForm735

22.1 介绍ActiveForm735

22.2 建立ActiveForm736

22.3 配置在Internet Explorer里使用的ActiveForm736

22.3.1 为ActiveForm设置选项736

22.3.2 连接到ActiveForm上737

22.3.3 了解OCCACHE738

22.4 使用CAB文件和包739

22.4.1 理解INF文件741

22.4.2 许可证问题742

22.5 在Word中运行ActiveForm742

22.5.1 注册应用程序742

22.5.2 在Microsoft Word里运行窗体743

22.6 使用ActiveForm模板745

22.7 套接字和ActiveForm745

22.7.1 套接字概述745

22.7.2 建立套接字支持的MIDAS ActiveForm746

22.7.3 创建基于MIDAS的ActiveForm747

22.8 总结749

第23章 MTS750

23.1 什么是MTS750

23.2 如何安装MTS752

23.3 创建简单的MTS服务器752

23.4 创建简单的MTS客户程序758

23.5 调用本地对象760

23.6 用MTS注册对象761

23.7 远程调用对象761

23.8 创建简单的MTS数据库服务器763

23.9 创建简单的MTS数据库客户程序770

23.10 处理MTS事务774

23.11 建立跨越多个服务器的MTS示例784

23.12 Rocket程序的代码786

23.13 总结799

第24章 CORBA800

24.1 理解CORBA800

24.1.1 什么是CORBA800

24.1.2 比较DCOM和CORBA801

24.1.3 什么是ORB802

24.1.4 什么是Smart Agent803

24.1.5 什么是BOA804

24.1.6 什么是代理、存根和框架805

24.1.7 理解Delphi和CORBA807

24.2 两个重要的CORBA存储库808

24.2.1 什么是Interface Repository808

24.2.2 什么是Implementation Repository809

24.3 简单的CORBA对象809

24.3.1 服务器810

24.3.2 客户程序817

24.3.3 理解客户程序819

24.3.4 理解CORBA存根822

24.3.5 理解CORBA框架822

24.4 理解服务器的IDL接口823

24.5 简单的CORBA动态项目824

24.6 简单的CORBA数据库对象831

24.6.1 创建CORBA数据库服务器831

24.6.2 创建客户程序840

24.7 利用VisiBroker Manager和OSFind842

24.8 总结843

第25章 Delphi、Java和C++844

25.1 在Delphi和Java中使用CORBA844

25.2 从Delphi调用Java服务器851

25.3 从C++Builder调用Delphi CORBA服务器856

25.3.1 用C++建立CORBA服务器并从Delphi调用866

25.3.2 理解BCBCorbaserver871

25.4 总结873

第26章 VCL图形类875

第七部分游戏编程875

26.1 Windows GDI与VCL TCanvas876

26.1.1 理解GDI876

26.1.2 VCL使图形编程更容易877

26.2 使用TCanvas877

26.3 研究与使用画刷878

26.3.1 TBrush.Color属性分析878

26.3.2 TBrush.Style属性分析878

26.3.3 TBrush.Assign方法分析880

26.4 研究与使用画笔881

26.4.1 TPen.Style属性分析881

26.4.2 TPen.Width属性分析881

26.4.3 TPen.Mode属性分析881

26.5 研究与使用字体883

26.5.1 TFont.Height属性分析883

26.5.2 TFont.Size属性分析883

26.7 研究与使用TCanvas.ClipRect884

26.6 研究与使用TCanvas.PenPos884

26.5.4 TFont.Style属性分析884

26.5.3 TFont.Name属性分析884

26.8 研究与使用TCanvas.CopyMode885

26.9 研究与使用TCanvas.Pixels886

26.10 分析与理解TCanvas方法886

26.11 MainBrush范例代码886

26.11.1 OnCreate事件895

26.11.2 FormShow方法896

26.11.3 设置画笔模式897

26.11.4 使用Fonts898

26.11.5 在画布上画出形状899

26.11.6 使用CopyMode902

26.12 其他名称的线条903

26.13 深入研究VCL906

26.13.1 深入了解TColor906

16.13.2 Colors样本项目907

16.13.3 OnChange事件处理程序909

26.14 调色板910

26.15 深入了解Windows的图形文件格式910

26.15.1 分析位图和DIB910

26.15.2 分析图标911

26.15.3 分析元文件912

26.16 分析TPaintBox和TImage915

26.17 再谈位图916

26.18 总结923

第27章 DirectDraw924

27.1 理解DirectDraw924

27.1.1 什么是DirectDraw925

27.1.2 关于双缓冲的几点想法926

27.1.3 硬件与仿真927

27.2 一个简单的DirectDraw程序928

27.3 释放接口934

27.3.1 进入独占模式和改变屏幕分辨率935

27.3.2 DirectDraw表面是什么935

27.3.3 向屏幕写文本937

27.3.4 交换表面938

27.3.5 释放内存939

27.4 平滑动画940

27.5 使用位图949

27.6 游戏资源955

27.7 总结956

第28章 更多的DirectX技术957

28.1 DirectSound957

28.1.1 初始化DirectSound958

28.1.2 枚举声音驱动程序961

28.1.3 使用DirectSoundBuffer962

28.1.4 打开WAV文件964

28.1.5 播放声音文件966

28.1.7 一次播放两个WAV文件967

28.1.6 播放大文件967

28.2 创建DirectX游戏968

28.2.1 创建DelphiMan程序970

28.2.2 实现DelphiMan程序的注意事项979

28.2.3 “机器人物”的控制982

28.2.4 小结DelphiMan程序982

28.3 浏览Direct3D982

28.4 关键的3D技术983

28.5 总结984

配套光盘内容986

1999《Delphi 4编程技术内幕》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,可向博主求助其电子版PDF文件(由(美)(C.卡尔维特)Charlie Calvert著;潇湘 1999 北京:机械工业出版社 出版的版本) 。对合法合规的求助,我会当即受理并将下载地址发送给你。

高度相关资料

Windows 2000编程技术内幕(1999 PDF版)
Windows 2000编程技术内幕
1999 北京:机械工业出版社
MFC技术内幕( PDF版)
MFC技术内幕
Visual C++ 技术内幕( PDF版)
Visual C++ 技术内幕
Microsoft SQL Server 6.5技术内幕(1999 PDF版)
Microsoft SQL Server 6.5技术内幕
1999
WindowsTM95技术内幕(1995年06月第1版 PDF版)
WindowsTM95技术内幕
1995年06月第1版 清华大学出版社
网络互连技术内幕(1998 PDF版)
网络互连技术内幕
1998 杭州:浙江科学技术出版社;西蒙与舒斯特国际出版公司
中文Windows 98技术内幕(1993 PDF版)
中文Windows 98技术内幕
1993 北京:机械工业出版社
Delphi 1.0/2.0实用编程技术(1997 PDF版)
Delphi 1.0/2.0实用编程技术
1997 西安:西安电子科技大学出版社
电脑入门必备  学电脑一书通(1999 PDF版)
电脑入门必备 学电脑一书通
1999 北京:冶金工业出版社
Delphi数据库编程技术(1999 PDF版)
Delphi数据库编程技术
1999 北京:人民邮电出版社
Delphi 4.0多媒体实用编程技术(1999 PDF版)
Delphi 4.0多媒体实用编程技术
1999 北京:中国水利水电出版社
Delphi实用编程(1998 PDF版)
Delphi实用编程
1998 西安:西北工业大学出版社
C++ Builder 4编程技术(1999 PDF版)
C++ Builder 4编程技术
1999 北京:人民邮电出版社
Windows NT 技术内幕(1993 PDF版)
Windows NT 技术内幕
1993 北京:清华大学出版社
Visual C++ 技术内幕 第4版(1999 PDF版)
Visual C++ 技术内幕 第4版
1999 北京:清华大学出版社