标题中的“vc2003,mfc71.dll报错”涉及到的是Microsoft Visual C++ 2003(简称VC2003)运行时环境的问题,特别是MFC(Microsoft Foundation Classes)库的一个组件——mfc71.dll。这个动态链接库文件是VC2003开发的应用程序在运行时所必需的,它包含了C++标准库的一些功能和MFC框架的实现。 MFC是微软提供的一种C++类库,用于简化Windows应用程序的开发。它封装了Windows API,提供了丰富的类来处理窗口、菜单、控件等,使得开发者可以基于面向对象的方式来构建Windows应用程序。MFC71.dll是MFC库的特定版本,对应于Visual Studio .NET 2003(也称为VC2003)。 当描述中提到“无法运行软件”,这通常意味着缺少或损坏的mfc71.dll文件导致了应用程序的启动失败。在Windows操作系统中,动态链接库文件(DLL)是多个程序共享代码的方式,如果一个程序依赖的DLL文件缺失或版本不匹配,那么该程序就无法正常执行。 解决方案正如描述中所提及的,可以将解压后的mfc71.dll文件复制到软件的安装目录下。这是因为许多应用程序会首先在自己的可执行文件同目录下查找依赖的DLL文件,如果找到则直接使用,找不到才会去系统路径中搜索。因此,将缺失的DLL放在软件文件夹内可以解决这个问题。 关于“vc2003_3107”这个压缩包文件名,推测其中可能包含了修复mfc71.dll问题所需的文件或者是一个更新补丁。通常这种命名方式表明这是针对VC2003的一个特定版本或补丁,3107可能是更新的编号或者问题修复的ID。 这个知识点涵盖了以下几个方面: 1. Microsoft Visual C++ 2003运行时环境及其组件MFC71.dll的重要性。 2. MFC作为C++开发Windows应用程序的框架,以及其在封装Windows API方面的角色。 3. DLL文件的作用和Windows系统如何加载它们。 4. 应用程序因缺失或损坏DLL文件导致的运行错误及解决方法。 5. 压缩包vc2003_3107可能包含的修复文件或补丁,用于解决mfc71.dll相关问题。 对于遇到此类问题的用户,他们可以通过下载并解压这个压缩包,将包含的mfc71.dll文件放到出错软件的安装目录下,以期望解决问题。同时,保持操作系统和相关软件的更新,以及定期检查和修复系统文件,可以有效避免类似问题的发生。
2026-05-26 14:50:00 3.29MB 系统插件
1
《VC++ 6.0数据库系统开发实例导航》是一本专为VC++ 6.0开发者设计的实战指南,着重于利用此版本的Microsoft Visual C++进行数据库应用程序的开发。这本书从第三章开始提供源码,意味着读者可以直接跳入到实践部分,无需从基础理论开始学习,对于有一定VC++基础的开发者来说尤为方便。 VC++ 6.0是微软公司推出的一款集成开发环境,支持C++编程语言,其强大的MFC(Microsoft Foundation Classes)库使得开发者可以便捷地构建Windows应用程序。在数据库开发方面,VC++ 6.0提供了ODBC(Open Database Connectivity)和ADO(ActiveX Data Objects)两种主要的数据访问技术。 1. ODBC:ODBC是一个标准的API,允许程序员通过统一的接口访问各种不同类型的数据库。在VC++ 6.0中,你可以使用ODBC数据源管理器来配置数据源,然后通过ODBC函数和SQL语句进行数据操作。例如,你可以创建一个ODBC连接,打开数据源,执行SQL查询,以及处理结果集。 2. ADO:相对于ODBC,ADO更加高级且易用。它是基于COM(Component Object Model)的组件,可以直接与诸如SQL Server、Access等数据库进行交互。在VC++ 6.0中,通过包含ado、adodb等头文件,可以创建ADODB::Connection对象来建立数据库连接,使用ADODB::Recordset对象来执行查询和操作数据。 数据库系统开发实例导航的部分可能涵盖了以下内容: - 数据库连接:如何设置数据源,创建数据库连接对象,以及处理连接异常。 - SQL语句的执行:如何构造和执行SELECT、INSERT、UPDATE、DELETE等SQL语句,以及使用参数化查询防止SQL注入。 - 记录集操作:如何遍历和修改ADODB::Recordset,处理游标移动,以及执行批处理操作。 - 错误处理:如何捕获和处理数据库操作中的错误,以及实现恰当的异常处理机制。 - 用户界面设计:利用MFC的对话框、控件和事件驱动编程,创建用户友好的数据库应用界面。 - 数据绑定:将数据库字段与UI元素绑定,实现数据的实时更新。 - 多线程数据库访问:如何在多线程环境中安全地访问数据库,避免竞态条件和死锁。 - 文件存储与事务处理:探讨如何处理大数据量的文件存储,以及事务的开始、提交、回滚操作。 - 数据库性能优化:包括索引的使用、查询优化、存储过程的编写等。 这些实例将帮助读者理解并掌握如何在VC++ 6.0环境下有效地设计和实现数据库应用程序。通过实际操作,开发者不仅可以巩固理论知识,还能积累实践经验,提高解决问题的能力。书中的源代码可供读者直接参考,有助于加速学习进程,提升开发效率。
2026-05-21 14:31:59 24.88MB VC++
1
《小型化诊所管理系统:VC6.0+ACCESS2003技术详解》 在医疗信息化领域,小型化诊所管理系统扮演着至关重要的角色,它能够帮助诊所高效地进行日常运营,如人事管理、病历管理等。本文将深入探讨一款基于VC6.0和ACCESS2003开发的诊所管理系统,解析其技术核心与应用价值。 VC6.0全称Microsoft Visual C++ 6.0,是微软推出的一款集成开发环境,主要用于编写C++程序。该系统选择使用VC6.0作为开发工具,是因为它具有强大的编程功能、直观的用户界面以及对Windows API的深入支持,特别适合构建桌面应用程序。VC6.0提供了丰富的类库和调试工具,使得开发者能够快速构建稳定的Windows应用程序。 ACCESS2003是微软的桌面数据库管理系统,它采用了关系型数据库模型,具备易用性、灵活性和可扩展性。在诊所管理系统中,ACCESS2003作为后台数据库,存储并管理诊所的各项数据,如患者信息、病历记录、员工资料等。通过ADO(ActiveX Data Objects)接口,诊所管理系统可以方便地与ACCESS2003进行数据交互,实现数据的读取、写入和更新操作。ADO是微软提供的数据访问接口,它封装了底层的数据库通信细节,使得开发者无需关心具体的数据库实现,只需关注业务逻辑。 系统的人事管理模块涵盖了员工信息的录入、查询、修改和删除等功能,通过VC6.0的界面设计,可以创建直观易用的操作界面,让工作人员轻松完成人事数据的维护。同时,ACCESS2003的表结构设计保证了数据的一致性和完整性,避免了数据冗余和错误。 病历管理模块是诊所管理系统的核心,它需要记录患者的个人信息、病情描述、诊断结果、治疗方案等详细信息。VC6.0可以设计出符合医疗规范的病历录入界面,而ACCESS2003则负责存储和检索这些病历数据。此外,通过ADO,系统可以实现对病历数据的高级查询,例如按疾病类型、就诊日期等条件筛选病历。 登录功能是系统的第一道防线,确保只有授权的用户才能访问系统。VC6.0提供了用户身份验证和权限控制的功能,结合ACCESS2003的用户和权限管理,可以实现多级权限设置,确保敏感数据的安全。 这款小型化诊所管理系统充分利用了VC6.0的强大编程能力以及ACCESS2003的数据库管理优势,实现了诊所日常运营的自动化。通过精简的设计和有效的数据管理,它极大地提高了工作效率,减轻了工作人员的负担,是小型诊所提升服务质量的理想选择。尽管随着技术的发展,新一代的开发工具和数据库管理系统不断涌现,但VC6.0+ACCESS2003的经典组合在很多场合仍然表现出其独特的优势和实用性。
2026-04-28 18:08:59 6.39MB VC6.0 ACCESS2003
1
本页收集了一些在VC++中进行HID设备读写的头文件:hid.lib hidpi.h hidsdi.h setupapi.lib targetver.h,需要时请引入这些头文件,链接库也要加入,至于怎么加入,百度就OK了,另附压缩包内附有一张示例图,告诉你如何引入这些头文件。 运行环境:Windows/Visual C/C++
2026-01-19 16:31:47 57KB VC/MFC源代码 文件系统源代码
1
内容索引:VC/C++源码,系统相关,查找文件  一个VC++快速查找系统文件的方法类,可以快速查找系统指定的文件,附有两个演示实例,类ffsco将文件查找操作简单封装,使用传递参数查找路径和文件匹配格式(可以继承该类的 match 方法实现自己的匹配算法)到find方法,查询结果(文件/目录等)被保存到类内部的vector容器,以后想怎么用都行。
2026-01-12 14:03:05 19KB VC/MFC源代码 Windows系统源代码
1
标题中的“获取操作系统版本信息的VC源代码”指的是使用Visual C++(VC)编写的程序,这个程序的主要功能是检索并显示运行它的计算机的操作系统版本信息。在Windows系统中,这些信息包括但不限于操作系统名称、版本号、服务包级别、体系结构(32位或64位)等。 描述中提到的“很好的代码,可以有效的利用,下载就可以用。”意味着这个源代码是经过优化的,可以直接被其他开发者用于他们的项目中,无需进行大量的修改或调试。这通常意味着代码质量较高,遵循了良好的编程实践,且可能有清晰的注释来解释其工作原理。 从压缩包内的文件名我们可以推测这个程序的结构: 1. `OSDetect.001` 和 `OSDetect.aps` 可能是项目的部分原始数据或临时文件,它们在Visual Studio中用于构建和管理项目。 2. `InfoDlg.cpp` 暗示存在一个名为"InfoDlg"的对话框类,这个对话框可能是用来显示操作系统信息的用户界面。 3. `OSDetect.cpp`, `OSDetectView.cpp`, `OSDetectDoc.cpp` 可能分别包含了程序的核心逻辑、视图类和文档类的实现。在MFC(Microsoft Foundation Classes)框架中,视图和文档类是负责处理用户交互和数据存储的关键组件。 4. `MainFrm.cpp` 通常包含了主框架窗口的实现,这是应用程序的主要窗口。 5. `StdAfx.cpp` 是预编译头文件,用于提高编译速度,其中包含了常用的库和预定义的宏。 6. `OSDetect.dsp` 和 `OSDetect.dsw` 是Visual Studio项目文件,`.dsp` 是早期版本的项目文件,`.dsw` 是工作空间文件,包含了项目的所有相关信息,用于管理和构建项目。 通过分析这些文件,我们可以得知这个源代码使用了MFC框架,这是微软为开发Windows应用程序提供的一种C++库。开发者可以通过调用MFC中的类和函数,如`CDialog`(用于创建对话框)和`CWinApp`(应用程序的主要类),来实现与操作系统的交互。同时,`GetVersionEx`函数很可能会在`OSDetect.cpp`中被用到,这是一个Windows API函数,用于获取系统版本信息。 总结来说,这个源代码项目是一个使用Visual C++和MFC编写的程序,它的目标是获取并显示操作系统的信息。通过学习和理解这个源代码,开发者可以学习到如何在Windows环境下编写程序,如何使用MFC框架,以及如何获取和处理操作系统版本信息。这对于进行系统级别的编程和开发具有跨平台需求的应用程序来说,是非常有价值的参考。
2025-12-29 23:27:27 42KB VC代码
1
【商店销售管理系统毕业设计VC++] 是一款基于C++编程语言开发的软件,旨在帮助小型商店进行日常销售流水账目的管理。这款系统虽然未详细记录每一种商品的销售情况,但能够记录每一笔收入和支出,方便商家跟踪财务状况。通过适度的扩展和定制,它可以升级为一个功能更完备的商店销售管理系统。 在设计此类系统时,开发者通常会关注以下几个关键知识点: 1. 数据结构与数据库:系统的核心是存储和处理销售数据。这涉及到对数据库的设计,如使用关系型数据库(如MySQL或SQLite),创建表格来存储收入、支出、日期等信息。数据结构的选择(如链表、数组、树等)也是关键,用于高效地组织和检索数据。 2. 用户界面:良好的用户界面能提高用户体验。在VC++中,可以使用MFC(Microsoft Foundation Classes)库来构建图形用户界面,包括输入框、按钮、列表视图等控件,以实现用户交互。 3. 输入验证:系统需对用户的输入进行有效验证,确保录入的数据格式正确,如检查日期格式、金额是否合法等,防止数据错误。 4. 记账逻辑:系统应包含计算和统计功能,例如计算每日盈亏、总销售额等。这些功能可能涉及到算法的应用,如求和、平均值等。 5. 数据持久化:为防止数据丢失,系统需要有数据备份和恢复机制。这通常通过定期保存数据到硬盘或云端实现。 6. 报表生成:系统应能自动生成财务报表,如收支明细表、月度报告等,方便商家分析经营状况。这可能涉及报表设计工具的使用,如Crystal Reports。 7. 安全性:考虑到商店敏感的财务信息,系统需要实施权限控制,确保只有授权用户能访问和修改数据。 8. 扩展性:为了适应未来的业务增长,系统设计应具有良好的扩展性,方便添加新的功能模块,如库存管理、会员系统等。 9. 错误处理和日志记录:良好的错误处理机制可以提高系统的稳定性,而日志记录则有助于追踪和解决出现的问题。 10. 测试与调试:在开发过程中,单元测试、集成测试和系统测试都是必要的,确保软件功能的正确性和可靠性。 通过【商店销售管理系统毕业设计】这个项目,学生可以深入学习C++编程、数据库设计、软件工程等方面的知识,并锻炼实际问题解决能力。这是一个理论与实践相结合的好例子,对于提升学生的专业技能大有裨益。
2025-12-22 14:48:22 693KB 毕业设计
1
Skin++是一款由VC++6.0编写的界面换肤系统,其主要功能在于允许开发者和用户自定义软件界面的外观,通过插件的形式实现皮肤的更换。该系统为开发者提供了一套完整的界面皮肤解决方案,使得软件界面能够根据用户的喜好或主题进行个性化调整,从而提高用户体验。 该系统的出现,对于界面开发人员来说,是一个极为有用的工具。它降低了界面开发的难度,并且提供了一种简便的方式来增强软件的视觉吸引力。开发人员无需深入了解图形界面编程的复杂性,就可以利用Skin++实现丰富的视觉效果。这样一来,程序员可以将更多的精力投入到软件功能的开发上,而不是界面细节的处理。 Skin++的核心价值在于其通用性和易用性。它支持多种界面风格,并且能够兼容多种应用程序。开发者只需按照Skin++提供的接口进行简单的调用,便能快速地为应用程序添加换肤功能。同时,Skin++的代码库设计得相对开放,便于开发者根据项目需求进行扩展或修改,以满足特定的换肤需求。 从技术角度来看,Skin++需要程序员具备一定的VC++6.0开发环境知识,以及对Windows消息机制和GDI图形编程有一定的了解。这对于有一定经验的开发者而言,并不是难以跨越的门槛。此外,Skin++还可能涉及到控件子类化、资源文件处理等高级话题,这些都是开发者在实现换肤功能时需要掌握的技能点。 在实际应用中,Skin++为用户提供了预设的多种皮肤,用户可以根据个人喜好进行选择和更换。这些皮肤通常包含了窗口、按钮、控件等元素的样式定义,甚至可以针对不同的操作系统版本进行适配。对于企业级应用,Skin++还支持企业定制专属皮肤,满足特定品牌和风格要求。 值得注意的是,Skin++虽然是一个通用的界面换肤系统,但它并不能解决所有界面定制化问题。有些特定的视觉效果可能需要通过直接操作图形API来实现,这时候开发者可能需要对Skin++进行扩展或寻求其他工具的帮助。 Skin++作为一个功能强大的界面换肤系统,极大地简化了界面开发的流程,提高了软件的可维护性和用户的满意度。对于需要快速开发具有良好用户体验的应用程序的开发者而言,Skin++无疑是一个值得推荐的工具。
2025-12-07 18:54:36 7.92MB VC++6.0 换肤插件
1
学生成绩管理系统是一种用于高校或教育机构管理学生分数、跟踪学术表现的应用程序。在这个特定的“学生成绩管理系统-毕业设计(VC+ODBC)”项目中,开发者使用了Microsoft Visual C++(VC)作为编程环境,并结合Open Database Connectivity(ODBC)技术来实现数据库连接。这是一份由大学生为完成其毕业设计而制作的作品,旨在展示其在软件开发领域的技能和理解。 让我们详细了解一下Visual C++(VC)。VC是微软公司推出的一种集成开发环境,主要用于编写Windows平台上的应用程序。它支持C++语言,并提供了丰富的类库和工具,包括MFC(Microsoft Foundation Classes),使得开发者能够更容易地构建用户界面和访问操作系统功能。 ODBC,全称为Open Database Connectivity,是一种标准的数据库访问接口,允许应用程序通过统一的方式与各种不同的数据库系统进行交互。在本项目中,ODBC起到了桥梁的作用,使得VC编写的前端应用程序能够与后端数据库进行通信,无论数据库是SQL Server、MySQL还是其他支持ODBC的系统。这样,开发者无需关心具体数据库系统的细节,只需关注数据的存储和检索逻辑。 在实际操作中,学生成绩管理系统可能包含以下核心功能: 1. **用户管理**:管理员可以添加、修改和删除教师、学生等用户的账号信息,确保数据安全。 2. **课程管理**:记录课程信息,如课程名、任课教师、学分等,便于后续成绩录入和统计。 3. **成绩录入**:教师可以通过系统输入学生的平时成绩、期中成绩、期末成绩等,系统自动计算总评成绩。 4. **成绩查询**:学生和教师可以查询个人或班级的成绩,查看排名和平均分。 5. **报表生成**:系统应具备生成各类报表的能力,如班级成绩分布图、个人成绩报告单等,方便分析教学效果。 6. **权限控制**:不同角色的用户有不同的操作权限,如管理员可修改所有数据,教师只能查看和修改自己所教课程的成绩,学生只能查看自己的成绩。 7. **数据备份与恢复**:定期备份数据库,以防数据丢失,同时提供数据恢复功能,以应对意外情况。 8. **安全性**:保证系统数据的安全性,防止非法访问和篡改。 通过这个毕业设计项目,开发者不仅锻炼了编程技能,还学习了如何设计和实现一个完整的数据库应用系统,包括需求分析、界面设计、数据库结构规划、程序逻辑编写以及错误处理等。此外,该项目也反映了在实际开发中考虑用户体验、性能优化和数据安全的重要性。 “学生成绩管理系统-毕业设计(VC+ODBC)”是一个集成了C++编程和数据库连接技术的实例,对学习和理解这两种技术的结合以及如何应用于实际项目具有很高的参考价值。对于想要深入学习软件开发,尤其是数据库应用开发的学生来说,这是一个很好的实践项目。
1
VCLZip Native Delphi Zip/UnZip Component! (VCLZip Lite: Version 2.23 April 14th, 2002) (VCLZip Pro: Version 3.10 Buid 1 - November 25th, 2007) IMPORTANT: If installing the registered version, please be sure to always re-install/rebuild the components (VCLZip and VCLUnZip) to the component pallette (or rebuild the design time package) so that the ThisVersion property and any other new properties will be properly updated. If your application still does not run without the IDE, open up VCLZip's package, click on options and look at the Directories/Conditionals tab. If KPDEMO is defined, remove it and recompile the package. ***IMPORTANT: Please remember do not install these components into a package by the name of either VCLZip or VCLUnZip. You will receive an error if you do. PLEASE TAKE A LOOK AT THE "WHAT's NEW IN THIS VERSION" LINK IN THE HELP FILE AS IT HAS CONVENIENT LINKS TO ALL OF THE NEW TOPICS. ==================== Version 3.10 Build 1 - Several bug fixes. - Added support for Delphi 2006, 2007 - Added support for BCB 2006, 2007 - Improved memory performance when working with archives containing extremely high number of compressed files. ==================== Version 3.06 Build 2 Made Delphi 2005 compatible Other assorted fixes ==================== Version 3.05 Build 1 Fixed a lot of incompatabilities between VCLZip and WinZip Other assorted fixes ==================== Version 3.04 Build 1 New ZLib methods for optimized compression and decompression of single entities of data in standard ZLib format, without the overhead of the PKZip format. This is excellent for compression of data to be sent across the net, compressing web pages (http compliant compression), blobs, etc. - ZLibCompressStream - ZLibDecompressStream - ZLibCompressBuffer - ZLibDecompressBuffer - ZLibCompressString - ZLibDecompressString Overloaded TStream Methods for Delphi 4,5, BCB 4, and 5 - UnZipToStream - UnZipToStreamByIndex - ZipFromStream Special OnGetNextTStream Event for Delphi 4,5, BCB 4, and 5 - Allows zipping multiple TStreams in one process - More efficient than calling ZipFromStream multiple times Capability to use the latest version of ZLib 1.2.1. - VCLZip currently uses 1.4.1 by default. - By defining ZLIB121, VCLZip will use the latest version of ZLib which is included with the registered version. Some optimization improvements which should show some improvement in zipping and unzipping speed when using TkpStreams with D4, D5, BCB4, and BCB5. ============ Version 3.03 (VCLZip Pro) - Please test your application thoroughly with this new version of VCLZip Pro. While it has been tested and has even been used in at least two production applications for several months now prior to initial release, there are so many combinations of property settings, environment differences, and ways to use VCLZip that you should always test VCLZip completely in your application before deploying. *** New Zip64 capabilities, properties, methods and events: - Uncompressed, Compressed, and Archive file sizes can be up to 2^63-1 bytes in length. - You can compress up to 2147483647 files into an archive. This is compatible with PKZip's Zip64 format. - If a file does not extend beyond any of the original limitations (filesizes of 4 gig or 65535 files) then no Zip64 format information is included in the archive. - property isZip64 - tells you when you are working with a zip file that is using Zip64 format. Much faster processing due to linking to Zlib object files for compression and decompression routines. Blocked Zip Files (spanned zip archives split onto hard drive) - Now completely compatible with PKZip and WinZip split archives file naming format. - For backwards compatability you can tell VCLZip to use the old VCLZip filenaming format by using the BlockMode property. - New method OnFileNameForSplitPart called just before each split filepart is created. VCLZip supplies a default implementation of this method so for most purposes you won't need your own. - method DefaultFileNameForSplitPart - VCLZip calls this internally if you don't define your own OnFileNameForSplitPart. You can also call it from your own OnFileNameForSplitPart if you wish to add some processing to the default behavior. - property BlockMode - determines whether VCLZip uses PKZip/WinZip standard naming convention or VCLZip classic method. - method DefaultGetNextDisk - VCLZip calls this internally if you don't define your own OnGetNextDisk. You can also call it from your own OnGetNextDisk event if you wish to add some processing to the default behavior. - Properties for controlling which files are zipped... - IncludeHiddenFiles - default False; - IncludeSysFiles: - default False; - IncludeReadOnlyFiles: - default True; - IncludeArchiveFiles: - default True; - Event OnGetNextStream - Allows you to zip from multiple streams when using the ZipFromStream method. This improves performance since repeated calls to ZipFromStream causes the archive to be updated on each subsequent call. - property ThisBuild - Tells you the current build. See also ThisVersion - property OnHandleMessage - Handles interactive messages with VCLZip. There is a default, so you don't need to define your own unless you wish to eliminate interactive messages and handle them on your own. This is helpful if you are using VCLZip as a service or on a webserver for instance. ******** Upgrading existing applications that use VCLZip 2.X ********** For the most part, existing applications will work as-is. Just install VCLZip 3.X and recompile your code. Here are some things to be aware of though... 1) If your app currently creates mmBlock archives (spanned directly to hard drive) and you define your own OnGetNextDisk in VCLZip 2.X, you should move your code from this event that handles mmBlock events to the new event OnFileNameForSplitPart. However, if you simply rely on VCLZip's default OnGetNextDisk then you don't have to worry about this. 2) If your app creates mmBlock archives, the default naming convention has changed to match the PKZip/WinZip standard. If you wish to keep the same naming convention then set BlockMode := mbClassic. 3) OnGetNextDisk and OnPrepareNextDisk events are called for the 1st disk now. VCLZip 2.X only calls these events starting with the 2nd disk. 4) properties CompressedSize[Index], UncompressedSize[Index], ZipSize are now Int64 types. 5) Delphi 4, Delphi 5, BCB 4, and BCB5 are all capable of using the Zip64 format. However they use the TkpHugeStream decendants which act just like TStreams except they handle files/stream sizes larger than 2gig. There is a TkpHugeFileStream and a TkpHugeMemoryStream which should handle 99% of all necessary actions. If you currently work with VCLZip 2.X with TBlobStreams or some other type of streams, you can either define your own TkpBlobStream for instance which inherits from TkpHugeStream, or use the TkpHugeStream.CopyFrom(TStream, Count) and the TkpHugeStream.GetStream: TStream methods to give VCLZip your stream and get it back. Ofcourse when using regular TStream decendants in D4,4,BCB4,and 5, you cannot create Zip64 archives. If you use Delphi 6, 7, or BCB 6, you don't have to worry about any of this as the normal TSTream is used by VCLZip and handles large file/stream sizes. ============ Version 2.23 (VCLZip Lite) Added the OEMConvert property. Filenames stored in a PKZip compatible archive normally go through an OEM conversion to make them ascii compatible. When opening the zip file the conversion is undone. If you do not plan on having other zip utilities opening up your archives this conversion process is not really necessary. Setting this property to False will eliminate this process. The default value for this property is True for normal PKZip compatability. Added OnEncrypt and OnDecrypt events. These allow you to replace the standard pkzip encryption with your own. Data is passed to these events a buffer at a time. Use this with care as this is still somewhat experimental and I'm not sure how useful it is yet. You must make all changes within the buffer sent in to you. Treat the entire file as a stream. Byte for byte replacement only. No additional keys can be saved. Added OnRecursingFile event. Sometimes when using wildcards and recursing directories, there was no reporting of progress. This will be fired each time a file matches as the file list is being built while recursing directories. Added the EncryptBeforeCompress boolean property. The default for this property is False and if left like this VCLZip will behave like normal. If set to True, VCLZip will encrypt each buffer prior to compressing it instead of afterwards. This will cause files to not be decryptable by normal zip utilities thereby adding a bit of extra security. Bugs Fixed: IMPORTANT!!! Behavior of freeing the ArchiveStream (compressed stream) has been modified. VCLZip will now no longer try to free ArchiveStream, you must free it yourself. This was due to a problem where it would be freed automatically if there was a problem with the ArchiveStream when trying to open it as a zip file (possibly corrupt). Best practice is that ArchiveStream should always point toward a TMemoryStream that you create anyway. Modified the SFX code (the code used to create the SFX stub distributed with VCLZip) so that it handles filenames that have been run through an OEM Conversion. The SFX was losing accented characters. This modification means that if you are creating zip files to be used as SFX's you will want to leave the OEMConvert property mentioned above, set to it's default value of True. Modified so that when cursor is changed to hourglass by VCLZip, previous cursor is saved correctly instead of just changing it back to default cursor. Now saves Central Directory Extra Fields correctly. Fixed the SFX code so that it works properly if you use Copy /B to concatenate a zip file to the stub. Due to a Delphi strange behavior sometimes path names for directory only entries would become corrupted. Removed reference to QConsts, replaced with RTLConsts. Sometimes a GPF would result if a corrupt zip file was opened. Using a wildcard in pathname added to FilesList did not work. Using '*.*' as a wildcard in files added to FilesList now is the same as using '*'. VCLZip will now check for CancelTheOperation during initial building of the fileslist instead of just during compression processing. Added a final call to OnTotalPercentDone with 100% because this didn't always happen. Attributes were not getting set correctly for directory-only entries. Fixed a problem that was not allowing ZipComment's to be added correctly to spanned or blocked zip files. Not the same fix as in 2.22. Directories (directory-only entries) were not being restored properly unless DoAll was True. You were unable to delete a directory from which files were recursively zipped until exiting your application. ============ Version 2.22 Now Delphi 6 compatible. New event called {link=93,OnRecursingFile} which gets called as VCLZip recurses directories searching for files that match a wildcard that is entered in the FilesList. This gets called each time a file matches the wildcard. Fixed a bug which kept diskettes from being labeled when creating spanned zip files on WIN31. Fixed a bug which sometimes did not allow zip comments to be added to blocked zip sets. Fixed a bug which caused VCLZip to not properly handle the IncompleteZip exception on spanned zip sets unless you called ReadZip prior to calling UnZip. Version 2.21 (Changes are shown in the build stages as they were implemented) Pre-Release Build 5: When working with temporary files, VCLZip will now rename, instead of copy, the temp file if the destination is on the same drive. This will speed up the adding of files to an existing zip file when the resulting zip file is very large. Pre-Release Build 4: New event called OnPrepareNextDisk which is an event that will allow you, when creating spanned zip files across diskettes, to do things like format a diskette that has just been inserted, or to add or delete files from the diskette before continuing with the zipping process. Fixed a problem that was causing the CancelTheOperation Method to not work properly. Pre-Release Build 3: Fixed bug which caused VCLZip to miscalculate space needed for zfc file if wildcards are put into the FilesList. Fixed bug so you could have FilePercentDone without needing TotalPercentDone when creating spanned zip files Fixed so relative_offset set correctly for spanned zips. Side effect of removing needless write of header. Added code to read local fileheaders if exception thrown when reading a central fileheader. Fixed problem where directories couldn't be created from directory entries because the fullpath wasn't known yet. Result of having moved this code to earlier. Fixed typo in creation of LOC header values which could cause error if reading local headers. Changed so Zip Comment starting position is calculated based on end of central record instead of end of file. Pre-Release Build 2: IMPORTANT: Changed default for FileOpenMode back to fmShareDenyNone as it had been for all but version 2.20. Fixed a problem where drivepart (i.e. C:\) was not being stripped when saving relative paths. Added a BufferedStreamSize property which can increase the speed of creating zips to floppy (and other slow media) dramatically. The new default for this should increase the speed by as much as 3 times, but you can now tweak this especially for your application! Added an ImproperZip property which gets set when VCLZip detects an inconsistency with the zip. This can be useful for detecting when VCLZip was able to open the zip in spite of an inconsistency found. There was no way to know this in the past. Fixed a problem where zip comments in zfc files were not being read correctly. Added a setZipSignatures procedure which allows you to modify the signatures of your zip file. This will cause other zip utilities to not be able to recognize or read your zip files created with VCLZip. Useful if you want to add further security to your zip files. Pre-Release Build 1: Some zip files would not open correctly, throwing an incomplete zip file exception due to an erroneous "extra field length" identifier in headers of some compressed files. These zip files are rare, but a very few people seemed to have several of them. This problem would not affect zip files created by VCLZip, and this problem should only occur in VCLZip 2.20, not in any previous version. If you had Range Checking turned on, VCLZip would get a range check error when using a wildcard that ended with a * as in 'somefile.*'. Under certain circumstances, drive information would not be stripped from path information if zipping recursively (including subdirectories) "Retrying" to zip a file that could not be opened using the OnSkippingFile event would not always work correctly. Creating spanned zip set to floppy should be faster now due to removing a needless header write to disk for each file. VCLZip would not compile correctly with MAKESMALL defined. Added code to make VCLZip work with BCB5. Haven't tested this yet though since I don't have BCB5 myself yet. Added readonly boolean ImproperZip property which will be set to True when some sort of problem is found when opening the zip file, even if recoverable. This property will be enhanced and refined in the future. If KeepZipOpen is set to True, when putting in the wrong disk in a spanned zip set, VCLZip would not always properly close the file on the old diskette before trying to open the file on the next diskette. Added ECantWriteUCF exception which will be thrown if VCLZip runs out of room to write the uncompressed file when unzipping. Timestamp was not being set properly when unzipping readonly files. Moved setting of the timestamp to before the attributes get set. ============ Version 2.20 Changes have been made in the following areas: --Performance There are a few code optimizations that should speed up the zipping process slightly. --Spanned Zip Files A new feature, turned on with the SaveZipInfoOnFirstDisk allows VCLZip to create and read spanned zip files starting with the first disk instead of the normally required last disk of the spanned disk set by saving a Zip Configuration File on the first disk. This feature can be used even if creating the spanned zip file directly to your hard drive. A new property, SaveOnFirstDisk, allows you to save room on the first disk when creating a spanned zip file, to allow room for other files, such as setup programs, data files, or a Zip Configuration File. Spanned zip files can now be directed toward disks greater than 2 gig in size as long as you are using Delphi 5 or BCB 4. --UnZipping The new Selected indexed property offers another way to flag files to be unzipped. Files that have the Selected property set to True can be unzipped using the UnZipSelected method. The Selected property will be cleared (set to False) for each file as it is unzipped, but you can also call the ClearSelected method to clear them all. At anytime the NumSelected property can be checked to see how many files have been selected. Also, the UnZipToBufferByIndex and UnZipToStreamByIndex methods allow you to unzip files specified by their index instead of by name or wildcard. The BufferLength property allows buffered output (buffer smaller than the total uncompressed filesize) when unzipping directly to memory (see UnZipToBuffer and UnZipToBufferByIndex). This will cause the OnGetNextBuffer Event to be called everytime BufferLength bytes have been output by VCLZip. Modified to work in all ways with zip files that have "extra fields" in their headers. These tend to be quite rare, but they do show up from time to time. --Zipping Added a property called FileOpenMode which allows you to define the file open mode for files when they are opened to be zipped. Added a Retry parameter to the OnSkippingFile Event that can be used to re-attempt to open a file for zipping that is open by another process. This gives the chance to close the file and continue with the zipping process rather than having to start over again. Added a ENotEnoughRoom exception which will be thrown if there is not enough room to write to the archive, i.e. out of disk space. The new OnUpdate Event gets fired when updating or freshening an existing archive. It is triggered for each file that already exists in the archive as it is either replaced or kept in the updated archive. The AddDirEntriesOnRecurse will cause separate directory entries to be included in archives when doing recursive zips through subdirectories. --Integrity Checking A new method, CheckArchive, will perform an integrity check on all files in an archive. This is much faster than using FileIsOK on each file if testing all files in an archive with VERY MANY files. Further improved checking for corrupted zip files when opening zip files. --Encryption The following new properties and methods allow lower level work with password encrypted archives: DecryptHeader Gets the decryption header for a particular compressed file in an archive GetDecryptHeaderPtr Same as DecryptHeader but easier to use in BCB. DecryptHeaderByte Method Tests a password against the decryption header found in the DecryptHeader property. GetDecryptHeaderByteByPtr Same as DecryptHeaderByte but easier to use in BCB. --Self Extracting Executables Changes were made to the ZIPSFX32.BIN stub itself: - Modified to work with zip files containing "extra fields" in their headers. - Modified to change mouse cursor to an hour glass during processing. - Check for correct file size is now done automatically - Now uses the end of central and central headers to find the first local header. - Added a progress meter - Better checking for corrupted zip files. - Added an information window that can optionally be shown when the sfx is initially started up. - Added an AutoRun option to make the sfx stub run automatially when double clicked with no other interaction from the user. For the new modified sfx stub, ZIPSFX32.BIN, instead of using kpSFXOpt, you should now use the TSfxConfig component to set the options for the sfx stub. The new sfx can be found in the sfx\ subdirectory as usual and is called ZIPSFX32.BIN and the original sfx can be found in the same subdirectory except it is now called ORGSFX32.bin. Just rename it if you prefer that one (use KPSFXOPT instead of TSfxConfig with the old stub). --Miscellaneous The installation is now easier, atleast for first time installers of the source code. The .DPK files for Delphi and .CPP files for BCB are now included. Now these files simply have to be compiled and that's it. There is a separate option in the installation for installing to the different versions of Delphi and BCB. Added a property called FlushFilesOnClose which will cause all files opened for write by VCLZip to have their disk buffers flushed to disk when closed. Added the capability to delete Selected files from an archive using the DeleteEntries Method. The behavior of the OnInCompleteZip Event has been greatly improved. You can now use this event to ask the user to insert the last disk of a spanned disk set rather than having to handle this situation from outside VCLZip. The register procedures were changed so that the components now get installed to the "VCLZip" tab on the palette. I found that for all but Delphi 1 I had to actually manually move the components to the "VCLZip" tab. You may find that you have to do this too if you have already installed VCLZip before. The components now use new bitmaps in place of the old ones on the component palette. Separated many compiler defines into a new file called KPDEFS.INC. ==================================== Version 2.18: 1) Thanks to the hard work of a fellow registered user, added the capability to remove all dependencies on the Dialogs, Forms, Controls, and FileCtrl units by defining the conditional MAKESMALL, which results in a smaller footprint. This can be quite useful when putting VCLZip into a DLL for instance. In order to make this work, go into your Project | Options and select the Directories/Conditionals tab and enter MAKESMALL in the conditional defines text box. In Delphi you can add this conditinal define to the project options of your application that uses VCLZip and then do a "build all". In BCB you will have to add this to the project options of the package that contains VCLZip and then rebuild the package. If you define MAKESMALL, the only things you lose are: a) ZIP file open dialog box that appears when the ZipName is set to "?" b) Select Directory dialog box that appears when the DestDir is set to "?" c) Changing the cursor to an hour glass during some operations. d) No long filename support in Delphi 1 2) Made VCLZip completely BCB4 compatible. 3) Added some exception handling to KPUNZIPP and KPINFLT, mainly to handle unexpected situations when wrong passwords are entered. This fixes the problem with PRP, the password recovery program. 4) For Borland C++ Builder, changed any COMP types to double, getting rid of the compiler warnings for unsupported comp type. This affects the OnStartZipInfo and OnStartUnZipInfo events, so you'll have to change the comp parameter to double in these events if you use them (in both your header files and in the CPP files). 5) Modified OnStartUnZip event so that FName (the filename of the file that is about to be unzipped along with complete path) is now a VAR parameter and can be modified. This allows you to change the path and name of a file that is about to be unzipped. This is especially helpfull in applications like Install Programs. NOTE: You will need to change your current code to add the VAR to the event definition and implementation if you already use this event in your application. (In BCB, add a & just before the parameter instead of VAR) 6) Moved many type definitions to VCLUNZIP.PAS so that kpZipObj won't have to be included in your USES list. 7) Fixed bug that caused GPF when setting Zip Comment to '' (empty string). 8) Moved strings in VCLZip/VCLUnZip into a string table, making the code size a little smaller as well as making it much easier to localize string information. However you have the option of not using the new string table, for whatever reason, by defining NO_RES in your project options (in the conditional defines text box on the Directories/Conditionals tab). 9) Removed the need for several files. No longer included are kpstrm.res, kpstrm.rc, kpsconst.res, kpsconst.rc, kpstres.pas, and for Delphi 1, kpdrvs.pas. In some cases the need for these files was eliminated and in other cases just rolled into the newly included kpzcnst.rc, kpzcnst.pas, and kpzcnst.res. Definining NO_RES in your project options will elimiate the need for these new files but will make your code size slightly larger and you won't be able to localize your application without changing VCLZip source code. 10) Modified the OnFilePercentDone and OnTotalPercentDone progress events to work better when creating spanned disk sets and blocked zip sets. They no longer report 100% when the compressed file still has to be copied to disk. 11) Added the ReplaceReadOnly property. Setting this to true will allow files with the ReadOnly attribute to be replaced during the unzip process. 12) Added the ifNewer and ifOlder options to the OverwriteMode property. (This had somehow made it into the help file but not into VCLUnZip) 13) Added the SFXToZip method which will convert an SFX file to a regular zip file. The header pointers will be properly adjusted during the conversion. 14) Fixed a problem where the OnGetNextDisk event would always revert to the DefaultGetNextDisk method instead of what you entered into the Object Inspector each time your project was re-opened. 15) Fixed a bug that caused CRC errors when unzipping files from spanned disk sets if they were STORED (no compression) and spanned across disks. 16) Added the OnZipComplete and OnUnZipComplete events. If defined, these will fire at the very end of a zip or unzip operation (after all files have been processed, not after each file). These events will rarely be used since, normally you will be able to do the same thing at the point that the call to Zip or UnZip returns, but these events can be useful when using VCLZip in threads where in certain circumstances the return from the Zip or UnZip methods are not seen. 17) Creation of SFX files has never been easier!!! The addition of the MakeNewSFX method allows you to create Self Extracting Executables without the need to create a zip file first. The files that you specify in the FilesList property will be zipped, using all the normal VCLZip property settings, and the SFX will be created, all in one step! In addition, you can create configurable SFX files using this method, and you can do this especially easy by adding the new unit kpSFXOpt to your application's USES list and using the new 32bit SFX stub that is now distributed with VCLZip. This allows you to easily set things like SFX Dialog caption, default target extraction directory, file to launch after extraction, etc. 18) Fixed a memory leak that only affects applications using VCLZip that are compiled with Delphi 2, and that use wildcard specifications in the FilesList property. Version 2.17a: 1) Fixed a bug that was keeping VCLZip from reading truncated zip files or sfx files that did not have their headers adjusted. 2) Fixed a bug that was causing a directory to be created on the C drive when doing integrity checking with the FileIsOK property. 3) Added {$V-} to kpZipObj.PAS 4) Moved two AssignTo methods to public instead of private in kpZipObj.PAS Version 2.17: 1) Added Memory zipping and unzipping capabilities through the UnZipToBuffer and ZipFromBuffer methods. See the documentation for these methods in the Help File for more information. 2) New FileIsOK Property allows you to check for the integrity of individual files within an archive without actually unzipping the file. 3) Fixed a bug that kept checking of volume labels from working on WIN31 when working with spanned disk sets. 4) Removed all references to ChDirectory so that VCLZip will be more thread safe allowing separate instances of VCLZip in separate threads to be performing zip/unzip operations at the same time. 5) A new public property PreserveStubs allows you to make modifications to sfx archives and have the archive remain an SFX rather than revert back to a normal zip file. 6) Added a default OnGetNextDisk event. If one is not defined, then the default event will be called when the situation arises that a new disk is needed when zipping or unzipping a spanned or blocked zip archive. 7) Added more power to the wildcard capabilities. Now you can qualify the * wildcard character, for instance: * would satisfy any number of contiguous characters as long as they are all a thru e. * would satisfy any number of contiguous characters as long as none of them were a thru e. This allows you to do things like include files in specific direcories into your ExcludeList. For instance: VCLZip1.ExcludeList.Add('c:\test\*.txt') would exclude the zipping of all .txt files in the test directory but not in any subdirectories. 8) Fixed other minor bugs and made other code enhancements. Version 2.16: ***Please be aware that if you currently use the OnSkippingFile event in any of your applications, version 2.16 will require a small modification as this event has an added parameter and one of the current parameters is used a little differently when being called by the zip operation. Please see the help file for more information. 1) The OnSkippingFile Event has been changed slightly, adding a parameter for the filename. 2) OnSkippingFile is now called when a file to be zipped is skipped because it is locked by another application. See the Help File for more information. 3) Fixed a bug with the Exclude and NoCompressList where they were ignoring entries with anything before the extention (i.e. 'somefile.*' as opposed to '*.zip') if you were saving directory information. 4) Fixed a bug that caused an error if you added a wildcard with a non-existent directory to the FilesList. 5) A few other minor bug fixes. Modifications for 2.15 include: 1) PackLevel can now be set to 0 (zero) which means no compression at all (STORED only). 2) New property ExcludeList is a new stringlist that you can add filenames and wildcards to in order to specify files that you do not wish to be included in an archive. 3) New property NoCompressList is a new stringlist that you can add filenames and wildcards to in order to specify files that you wish to be STORED with a PackLevel of 0 (zero), no compression. 4) All compiler warnings and hints were removed. Modifications for 2.14 include: 1) Delphi 4 compatability. 2) Added ability to use complex wildcards when specifying which files are to be zipped. This includes wildcard characters not only in the filename but also in the pathname. This allows you to specify directories using wildcards, for instance: VCLZip1.FilesList.add('c:\test\w*\mycode*.pas'); would get all PAS files beginning with mycode in subdirectories under TEST that begin with the letter w. Wilcards may be much more complex than this. Please see the help file for more information. 3) Added the ability to override the RECURSE property setting when specifying files to be zipped. By adding the following characters to the beginning of the filenames being added, you can override whatever the current setting is for the RECURSE property: '>' will force recursion into subdirectories '|' will force NO-recursion For instance: VCLZip1.FilesList.add('>c:\windows\*.ini'); will get all .ini files in and below the windows directory reguardless of what the recurse property setting is. and: VCLZip1.FilesList.add('|c:\windows\sys*\*.dll'); will get all .dll files in subdirectories of the windows directories that start with 'sys' but will not recurse into any directories below the sys* directories. 4) The [ and ] characters previously used as special wildcard characters have been changed to < and > since [ and ] are valid filename characters. If you still need to use the previous characters for backward compatability, I can show registered users how to easily modify a couple of constants in the source code in order to go back to the old style. See "Using Wildcards" in the help file for more information. 5) A few bug fixes. Modifications for 2.13 include: 1) New property ResetArchiveBitOnZip causes each file's archive bit to be turned off after being zipped. 2) New Property SkipIfArchiveBitNotSet causes files who's archive bit is not set to be skipped during zipping operations. 3) A few modifications were made to allow more compatibility with BCB 1. 4) Cleaned up the Help File some. 5) KWF file now works for Delphi 1 and Delphi 2 again. Still can't get context sensitive help in Delphi 3. 6) Cleaned up some of the code that was causing compiler warnings and hints. Modifications for 2.12 include: 1) Added a TempPath property to allow the temporary files path to be different from the Windows default. 2) Modified VCLZip so that any temporary files that are created receive a unique temporary filename so as not to clash with any other files in the temporary directory. This also allows working with zip files residing in the temporary directory. 3) Fixed a bug in the relative path feature. 4) Fixed a bug that caused a "list out of bounds" error if a file in the FilesList did not actually exist. Modifications for 2.11 include: 1) Fixed password encryption bug for 16 bit. 2) Fixed "invalid pointer operation" when closing application bug. 3) Fixed path device truncation bug which caused inability to modify existing archives in 16 bit. 4) Fixed inability to cancel during wilcard expansion bug. 5) Added capability to better handle corrupted timestamps. 6) Added capability to open and work with SFX files that were created with the COPY/B method (header files not adjusted). 7) Other small bug fixes. I'm still working on a bug which causes a GPF when continually unzipping the same file thousands to millions of times. This mainly affects programs like the Password Recovery Program (PRP) which uses the brute force method of searching for an archive's password. Modifications for 2.10 include: 1) Capability for 16bit VCLZip to store long file/path names when running on a 32bit OS. 2) New property (Store83Names) which allows you to force DOS 8.3 file and path names to be stored. 3) Better UNC path support. 4) Fixed a bug to allow files to be added to an empty archive. Modifications for 2.03 include: 1) Volume labels now get written correctly to spanned disk sets in Delphi 1 for all versions of Windows. 2) Delphi 1 VCLZip now correctly recognizes when it is running on Windows NT. 3) Fixed a problem with zipping files in the root directory when StorePaths = True. 4) File and Zip Comments are now read correctly from spanned/blocked zip archives. 5) Fixed a buf that was causing "Duplicate Object" errors. Modifications for 2.02 include: 1) Fix for file comments which were supposed to be fixed in version 2.01 but weren't. 2) Fix for stream zipping. Version 2.01 would not create a new archive if using a stream. (The Stream Demo now allows creating new zip files to streams too) 3) A few other minor modifications to further solidify the code. 4) A modification to the Zip Utility Demo which allows unzipping from Blocked zip files as if they were single zip files. 5) Added a read-only, published ThisVersion property which reflects the version of the VCLZip/VCLUnZip that you are currently working with. Modifications for 2.01 include: 1) Fixes for exceptions that were caused when CANCELING a zip or unzip of a spanned zip file. 2) Fix for a possible problem when zipping or unzipping a spanned zip file when one or more of the compressed files resided on more than 2 of the spanned parts. 3) Fix for file comments which were broken in version 2.00. Additional features for version 2.00 include: 1) Modify/Add internal file details (filename, pathname, timestamp, comment) for any file while zipping, in the OnStartZip event. 2) Add an Archive Comment while zipping in the OnStartZipInfo event. 3) Delphi 1 compatiblity for VCLZip. 4) Stream to Stream Zipping - Archives themselves can now be TStreams! 5) New Relative Path Information option. 6) Unzip archives that weren't zipped with the Relative Path option turned on as if they had been by determining how much path information to use with the Rootpath property. 7) Modify timestamps for files in existing archives (you could already modify filenames and pathnames for files in existing archives) 8) The OnBadPassword event now allows you to supply a new password and try the same file again when unzipping. 9) Source code has been cleaned up so that it will compile under Borland C++ Builder with no modifications. Also some bugs were fixed, most importantly: 1) An empty file, that had been compressed into an archive would cause any file added to the archive to cause the archive to approximately double in size. Any archives containing empty files are not corrupted, they are OK. This was simply a fix to the way the archive was processed. 2) After creating an SFX file, you had to close the zip file before you could modify it in any way, otherwise a stream read error was encountered. See the Help file for more information on new features. This zip file is part of a self contained installation program. Just run it and the installation program will begin. Contact vclzip@bigfoot.com for further information Thanks! Kevin Boylan
2025-11-21 19:21:14 522KB 源码 系统相关 VclZip
1