Visual Basic COM基础讲座之(二)

VB COM基础讲座之可重用性 

还记得我们是怎么将一个类添加到标准的Visual Basic工程中的?

  是的,一流的COM体系的最大特点是其代码的可重用性。



  换句话说,如果用Visual Basic创建一个用于财务管理的类,那么该类不仅可以通过其他程序来访问,而且还可用于其他合作者的应用程序。比如,一张Excel电子数据表可能就需要这样的数据,或者一个C++程序员可能需要获取他人最新工程的一些信息,等等。

  但是,当我们将所需要的类添加到标准的Visual Basic应用程序中,或是再编译成最终的EXE程序时,其他人仍然不能在程序内部处理类或属性。

  解决这个问题的方法是将所有的类投放到其他人的各自程序中,这称为"COM-enabled"。

  换句话说,假如类有AnnualProfitsToDate属性,一旦该属性得到后,类就会遍历公司的数据库,然后进行相应的一些计算,最后返回一个数值,该值单位可能是英磅、美元、日元或是其它。

  现在,若Excel用户需要对数据库进行上述处理,则只需简单地提供"类程序",而不是真正的代码。该程序释放类和AnnualProfitsToDate属性,允许其他用户将其插入到程序中去。同样,我们也不必告诉C++程序员如何进行人工统计(尽管他能够处理),只需要提供给这个程序就可以了。这样,就减少了大家许多工作。

  这种在Visual Basic工程中添加类后,还将类放进各自程序中的方法,称为ActiveX组件方法。

  在这种方法中,ActiveX程序中的所有功能都可以被其他支持ActiveX的程序语言来处理。换句话说,AnnualProfitsToDate属性既可被Excel、C++得到,也可被Access等其他程序处理。

  那么,如何创建一个用来处理我们的类的ActiveX程序呢?

 

VB COM基础讲座之创建第一个COM对象

让我们直接来开始创建第一个真正的COM对象,它将被用于那些ActiveX程序中。

  具体步骤如下:



  启动Visual Basic;

  我们将看到一个"New Project"对话框,其中有几个与ActiveX相关的选项图标。下面来解释一下:

  ActiveX DLL——创建一个包含类的.DLL程序,这是我们将要采用的选项;

  ActiveX EXE——创建一个包含类的.EXE程序,以后将讨论这个类型;

  ActiveX Control——添加一个工程,允许自己创建用于toolbox中的控件。这里不去讨论它。

  ActiveX Document EXE——创建一个基于Web页的.EXE程序,这里也不去讨论。

  ActiveX Document DLL——创建一个基于Web页的.DLL程序,由于与我们的主题甚远,所以自然也不去讨论它。

  顺便说明一下,如果在工程列表中没有上述选项,那么你可能使用了Visual Basic的学习版。

  当然,在上述那么多选项中颐钦嬲行巳さ氖茿ctiveX DLLs和Active EXEs。等会再来讨论后一种,这里先看看第一种!

  选中"ActiveX DLL"项;

  单击[OK]按钮;

  这样,一个ActiveX DLL工程就建立好了。我们之所以创建ActiveX DLL是准备将它作为一个前端服务器,它基于Northwind数据库中的Customers表的(Northwind数据库是随Visual Basic一起发行的,位于VB98文件夹中)。

  这也就是说,我们后面一定会处理Customers信息,但那时我们仅仅需要对类的调用,而不想过多地停留在数据处理代码的纠缠中。

  当然,我们得首先创建这个类。虽然COM能使编程更容易一点,但这个类的构造还是比较困难的。尽管如此,在深入数据库之前,先来对ActiveX程序中的名称作一些修改。

  将类的Name属性改为"Customers";

  选择"Project"->"Project Properties"菜单,在弹出的对话框中,将工程名改为"Northwind";

  现在再来使类与数据库相连:

  选择"Project"->"References"菜单;

  在弹出的对话框中,选择"Microsoft ActiveX Data Objects 2.1 Library",单击[OK]按钮;该"引用"允许用户处理一个数据库,当然现在都使用COM对象来处理了。下面将围绕相应的记录集而展开:

  在我们的类中添加下列代码:

Dim rs As Recordset

  这是一个用于访问数据库的记录集对象。

  当然,当其他开始使用该类时,我们希望记录集对象能和数据库建立连接,而当类使用结束后,与数据库的连接能断开。基于这种思想,其代码如下:

  在代码窗口中,将Object组合框中当前的"(General)"项改为"Class";

  在右边的组合框中,确保当前项为"Initialize";

  代码窗口中将出现:

  Private Sub Class_Initialize()

  End Sub

  当类刚开始时,所有这里面的代码都会被执行,类似于表单中的Form_Load事件。

  在"Initialize"事件中键入下列代码:

  Set rs = New Recordset

  rs.ActiveConnection = "Provider=Microsoft." & _

             "Jet.OLEDB.4.0;Data Source=C:/Program Files/" & _

             "Microsoft Visual Studio/VB98/Nwind.mdb;" & _

             "Persist Security Info=False"

  rs.Open "select * from customers", , adOpenKeyset, adLockOptimistic

  这里不需要任何与该类相关的代码,它只是使用Visual Basic通用的ADO数据库处理代码,该类中的代码是用来如何与数据库建立连接的。

  需要说明的是,如果Northwind数据库Nwind.mdb不在C:/Program Files/Microsoft Visual Studio/VB98文件夹,那么必须将ActiveConnection字符串内容作适当修改!

  当类开始时,rs对象负责与数据库建立连接,但当类对象结束后或程序关闭它时,我们应该使该连接断开。

  编程时,我们使用Terminate事件,它与Form_Unload非常相似的。从名称来看,它们都有一个"n",但更相似的地方是当相应的对象关闭后,它们都会被激发。

  下面来加入数据库关闭的代码:

  从Object组合框中选择"Class",从Procedure组合框中选择"Terminate";

  在"Terminate"事件中,添加下列代码:

  rs.Close

  Set rs = Nothing

  这就是我们添加的又一段简单代码,它只是简单地关闭数据库,然后将rs设置为Nothing。这样,rs就会被有效删除。

  好了,本节就到这里。下一节中,我们将继续添加代码用来处理数据中的记录集。

VB COM基础讲座之添加属性和方法

下面,我们添加一个属性来让用户获取CustomerID字段的值,其相应的示例代码如下:

  Public Property Get CustomerID() As String
   CustomerID = rs("CustomerID")
  End Property

  Public Property Let CustomerID(NewValue As String)
   rs("CustomerID") = NewValue
  End Property
 显然,该属性的Get操作只是简单地返回"CustomerID"字段的值,相应地,Let操作是将"CustomerID"字段设置一个新值。

  换句话说,属性中有两个部分:"getting"和"letting",事实上可能还有另外一个"setting"操作。但对于不同场合来说,我们总需要Get和Let来进行读和写的操作。

  这里所引起注意的是,在上述属性过程中,应该对某些值进行必要的检测。例如,在调用Let属性时,用户可能有如下操作:

  ObjectName.CustomerID = "HALFI"

  该Let属性操作后,"CustomerID"等于新的字符串"HALFI"。但当查看Northwind数据库内容时,我们会发现"CustomerID"字段的字符长度不能超过5。如果用户有这样的操作:

  ObjectName.CustomerID = "HALFISTORE"

  则出现数据库操作错误。虽然,可以通过错误句柄来处理这个问题,但是如果能在代码中检测NewValue的长度岂不更好?如果该值超过5个字符,我们既可以通过裁剪取共前5个字符,也可以忽略这个新的字符串而弹出一个错误提示。但这里,我们采用后一种措施。

  在我们的类中添加下列代码:

  Public Property Get CustomerID() As String
   CustomerID = rs("CustomerID")
  End Property
  Public Property Let CustomerID(NewValue As String)
   注释:If the length of NewValue is greater than five
   If Len(NewValue) > 5 Then
    注释:... then raise an error to the program
    注释:using this class
    Err.Raise vbObjectError + 1, "CustomerID", _"Customer ID can only be up to five " & _"characters long!"
   Else
    注释:... otherwise, change the field value
    rs("CustomerID") = NewValue
   End If
  End Property

  好了,在完成下列步骤之前,我们已经为添加方法花费了不少时间。

  在我们的类中添加下列代码:

  Public Sub Update()
   rs.Update
  End Sub

  该Update方法只是简单地调用记录集对象的Update方法来更新记录。

  下一步,我们将用一个很小的样例程序来测试这个属性和方法,在测试时还将使用特定的技巧来追踪类和程序的运行。

 

VB COM基础讲座之类的测试

现在就来测试前面创建的类。

  按F5运行程序;在弹出的属性对话框中,选中"Wait for Components to Start"(启动工程时等待创建部件),然后按[OK]按钮;



  这时,类就会被激活,其他程序就可使用它的功能。

  再次运行Visual Basic另一个实例;

  创建一个新的"Standard EXE"工程;

  选择"注释:Project"->"References"菜单;

  浏览对话框中可引用的列表项,可以发现一些额外的组件。

  选中"Northwind"列表项;

  Northwind就是前面创建的ActiveX工程。

  单击[OK]按钮;

  现在添加一些代码来使用上述工程:

  在Form1表单中添加一个命令按钮;为命令按钮添加下列代码:

  Dim Test As Customers
  Set Test = New Customers
  MsgBox Test.CustomerID
  Set Test = Nothing

  该代码首先创建一个新的Customers对象,然后显示CustomerID信息,最后将Test对象置为Nothing,并关闭它。

  按F5键运行测试程序;

  需要说明的是,当运行时出现"invalid reference"错误提示时,肯定哪些地方有问题。这时可按下面步骤重新来一次:

  (1) 在测试工程中去掉Northwind引用;

  (2) 重新启动Northwind工程;

  (3) 在测试工程中添加Northwind引用,再运行!

  单击表单中的命令按钮;

  这时运行时可能需要几秒钟,毕竟还要做一些如数据库连接等工作。但是,除了一开始的停留外,后面的调用就快得多了。程序将显示包含"ALFKI"的消息对话框。

  关闭测试程序。

  现在,我们来看看程序背后究竟发生什么。

  将插入符移动到MsgBox Test.CustomerID这条语句上;按F9;

  该语句显示为红色,用来标记一个断点。当代码运行时,它会停留在这里。按F8将单步运行此语句,并移动到下一句代码上。

  按F5再次运行测试程序;

  单击命令按钮;

  流程将停留在MsgBox这条命令上。

  按F8,慢慢单步执行各条语句;

  将会看到系统在两个Visual Basic中来回切换,显示出不同属性的处理过程。

  结束后,关闭测试程序。

  下面再对前面的工程进行测试。这一次,我们不仅获取CustomerID的值,而且还设置这个值。

  将命令按钮的代码改为:

  Dim Test As Customers
  Set Test = New Customers
  Test.CustomerID = "KARLY"
  Test.Update
  MsgBox Test.CustomerID
  Set Test = Nothing

  该代码首先设置"CustomerID"字段,然后更新记录集,最后显示出CustomerID属性,其结果应该是设置的"KARLY"。

  假如愿意,仍然可以按F9高亮显示"Test.CustomerID =" 这条语句,然后按F8单步运行来查看其工作情况。

  至此,我们已经成功地创建并测试一个简单的基于数据库的类。但是,还没有对customerID的字符串长度作测试,如果其长度超过5个字符,看看会发生什么?

下一步,我们将扩充并改进这个数据库类。

  首先添加类的几个特征:其他的属性、一些方法甚至一两个事件。 其相应的代码如下:

  Dim WithEvents rs As Recordset
  Public Event RecordsetMove()
  Private Sub Class_Initialize()
   Set rs = New Recordset
   rs.ActiveConnection = "Provider=Microsoft." & _"Jet.OLEDB.4.0;Data Source=C:/Program Files/" & _"Microsoft Visual Studio/VB98/Nwind.mdb;" & _"Persist Security Info=False"
   rs.Open "select * from customers", , adOpenKeyset, adLockOptimistic
  End Sub

  Private Sub Class_Terminate()
   rs.Close
   Set rs = Nothing
  End Sub

  Public Property Get CustomerID() As String
   CustomerID = rs("CustomerID")
  End Property

  Public Property Let CustomerID(NewValue As String)
   注释:If the length of NewValue is greater than five
   If Len(NewValue) > 5 Then
    注释:... then raise an error to the program
    注释:using this class, by running
    注释:Err.Raise vbObjectError + OurErrorNumber
    Err.Raise vbObjectError + 1, "CustomerID", _"Customer ID can only be up to five " & _ "characters long!"

   Else
    注释:... otherwise, change the field value
    rs("CustomerID") = NewValue
   End If
  End Property
  Public Property Get CompanyName() As Variant
   CompanyName = rs("CompanyName")
  End Property

  Public Property Let CompanyName(ByVal NewValue As Variant)
   rs("CompanyName") = NewValue
  End Property

  Public Property Get ContactName() As Variant
   ContactName = rs("ContactName")
  End Property

  Public Property Let ContactName(ByVal NewValue As Variant)
    rs("ContactName") = NewValue
  End Property

  Public Property Get ContactTitle() As Variant
   ContactTitle = rs("ContactTitle")
  End Property

  Public Property Let ContactTitle(ByVal NewValue As Variant)
   rs("ContactTitle") = NewValue
  End Property

  Public Property Get Address() As Variant
   Address = rs("Address")
  End Property

  Public Property Let Address(ByVal NewValue As Variant)
   rs("Address") = NewValue
  End Property

  Public Property Get City() As Variant
   City = rs("City")
  End Property

  Public Property Let City(ByVal NewValue As Variant)
   rs("City") = NewValue
  End Property

  Public Property Get Region() As Variant
    Region = rs("Region")
  End Property

  Public Property Let Region(ByVal NewValue As Variant)
   rs("Region") = NewValue
  End Property

  Public Property Get PostalCode() As Variant
   PostalCode = rs("PostalCode")
  End Property

  Public Property Let PostalCode(ByVal NewValue As Variant)
   rs("PostalCode") = NewValue
  End Property

  Public Property Get Country() As Variant
   Country = rs("Country")
  End Property

  Public Property Let Country(ByVal NewValue As Variant)
   rs("Country") = NewValue
  End Property

  Public Property Get Phone() As Variant
   Phone = rs("Phone")
  End Property

  Public Property Let Phone(ByVal NewValue As Variant)
   rs("Phone") = NewValue
  End Property

  Public Property Get Fax() As Variant
   Fax = rs("Fax")
  End Property

  Public Property Let Fax(ByVal NewValue As Variant)
   rs("Fax") = NewValue
  End Property

  Public Sub AddNew()
   rs.AddNew
  End Sub

  Public Sub Update()
   rs.Update
  End Sub

  Public Sub CancelUpdate()
   If rs.EditMode = adEditInProgress Or _rs.EditMode = adEditAdd Then
    rs.CancelUpdate
   End If
  End Sub
  Public Sub MoveNext()
   rs.MoveNext
  End Sub

  Public Sub MovePrevious()
   rs.MovePrevious
  End Sub

  Public Sub MoveFirst()
   rs.MoveFirst
  End Sub

  Public Sub MoveLast()
   rs.MoveLast
  End Sub

  Public Function FindByCustomerID(CustomerID As String) As Boolean
   注释:Uses the Find method to locate customers
   注释:with a matching CustomerID.
   注释:Returns True value is customer(s) found
   Dim varBookmark As Variant
   rs.MoveFirst
   rs.Find ("CustomerID=注释:" & CustomerID & "注释:")
   If rs.EOF = True Then
     FindByCustomerID = False
     rs.Bookmark = varBookmark
   Else
     FindByCustomerID = True
   End If
  End Function

  Public Property Get EOF() As Boolean
  注释:Example of a read-only property
  No Property Lets here
  EOF = rs.EOF
  End Property
  Public Property Get BOF() As Boolean
   注释:Another example of a read-only property
   BOF = rs.BOF
  End Property
  Private Sub rs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _
       ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
       ByVal pRecordset As ADODB.Recordset)

   注释:Reacts to the recordset MoveComplete
   注释:method - raises event with each move
   RaiseEvent RecordsetMove
  End Sub

  需要说明的是:迄今为止,我们仅仅是在一个类中添加代码。当然,也可以选择"Project"->"Add Class"菜单来向工程添加多个类,而且还可利用"collections"使这些类工作在一起。但是在这里,我们仍然想用一个类来处理一个数据表。

  将上述类的代码复制并粘贴到自己的类中,下一节将讨论该程序的编译。

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.9版分为标准版、增强版以及在线修复版。所有版本都支持修复DirectX的功能,而增强版则额外支持修复c++的功能。在线修复版功能与标准版相同,但其所需的数据包需要在修复时自动下载。各个版本之间,主程序完全相同,只是其配套使用的数据包不同。因此,标准版和在线修复版可以通过补全扩展包的形式成为增强版。本程序自V3.5版起,自带扩展功能。只要在主界面的“工具”菜单下打开“选项”对话框,找到“扩展”标签,点击其中的“开始扩展”按钮即可。扩展过程需要Internet连接,扩展成功后新的数据包可自动生效。扩展用时根据网络速度不同而不同,最快仅需数秒,最慢需要数分钟,烦请耐心等待。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。除常规修复外,新版程序还支持C++强力修复功能。当常规修复无效时,可以到本程序的选项界面内开启强力修复功能,可大幅提高修复成功率。请注意,此功能为试验性功能,请仅在常规修复无效时再使用。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 新版程序支持命令行运行模式。在命令行中调用本程序,可以在路径后直接添加命令进行相应的设置。常见的命令有7类,分别是设置语言的命令、设置窗口模式的命令,设置安全级别的命令、开启强力修复的命令、设置c++修复模式的命令、控制DirectDraw的命令、显示版权信息的命令。具体命令名称可以通过“/help”或“/?”进行查询。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了6项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“扩展”选项卡可以将任意版本的程序扩展成增强版。点击“DirectX版本”选项卡,可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。如果显卡驱动异常(包括显卡驱动未安装或显卡驱动太旧),程序会在该页面右上角进行提示。点击“实验室”选项卡可以开启实验功能:C++强力修复功能,通过全新的代码设计,彻底改善对于顽固异常文件的处理,极大提高修复成功率。API Sets强力修复功能,参照了DirectX文件的精细修复方式,极大地改善了修复失败的情况。修复失败时启用调试模式功能,可以在出现问题时分析错误原因。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8_win10的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.8版分为标准版、增强版以及在线修复版。所有版本都支持修复DirectX的功能,而增强版则额外支持修复c++的功能。在线修复版功能与标准版相同,但其所需的数据包需要在修复时自动下载。各个版本之间,主程序完全相同,只是其配套使用的数据包不同。因此,标准版和在线修复版可以通过补全扩展包的形式成为增强版。本程序自V3.5版起,自带扩展功能。只要在主界面的“工具”菜单下打开“选项”对话框,找到“扩展”标签,点击其中的“开始扩展”按钮即可。扩展过程需要Internet连接,扩展成功后新的数据包可自动生效。扩展用时根据网络速度不同而不同,最快仅需数秒,最慢需要数分钟,烦请耐心等待。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。除常规修复外,新版程序还支持C++强力修复功能。当常规修复无效时,可以到本程序的选项界面内开启强力修复功能,可大幅提高修复成功率。请注意,此功能为试验性功能,请仅在常规修复无效时再使用。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 新版程序支持命令行运行模式。在命令行中调用本程序,可以在路径后直接添加命令进行相应的设置。常见的命令有7类,分别是设置语言的命令、设置窗口模式的命令,设置安全级别的命令、开启强力修复的命令、设置c++修复模式的命令、控制DirectDraw的命令、显示版权信息的命令。具体命令名称可以通过“/help”或“/?”进行查询。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了6项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值