使用其它部件提供的对象的应用程序或部件称之为客户端。部件以相对于客户端的位置作为其特征。一个进程外部件是一个 .exe 文件,在其自己的进程中运行,且使用自己的执行线程。因此,客户端与进程外部件之间的通信被称为进程间或进程外通信。进程内部件,如 .dll 或 .ocx 文件,与客户端运行在同一个进程中。由于属性和方法调度不必跨越进程,所以提供了最快捷地访问对象的方法。但是,进程内部件必须使用客户端的执行线程。详细信息   第八章“建立代码部件”进一步介绍了进程内和进程外部件,包括线程安全 DLL 和多线程 EXE 部件。控件部件(.ocx 文件)是进程内部件,将在第九章“建立 ActiveX 控件”中深入介绍。提供活动文档的部件可以在进程内或进程外运行,如第十一章“创建 ActiveX 文档”中所介绍。“建立代码部件”进一步介绍了进程内和进程外部件,包括线程安全 DLLs 和多线程 EXE 部件。控件部件(.ocx 文件)是进程内部件,将在“建立 ActiveX 控件”中深入介绍。提供活动文档的部件可以在进程内或进程外运行,如“创建 ActiveX 文档”中所介绍。

解决方案 »

  1.   

    用 Microsoft Visual Basic 创建的软件部件是一个包含可执行代码的文件─ .exe、.dll或 .ocx 文件─ 它提供的对象可被其它应用程序和部件使用。使用其它软件部件提供的对象的应用程序或部件称之为客户端。客户端通过创建一个软件部件提供的类的实例,并调用其属性和方法来获得该部件的服务。在 Visual Basic 的早期版本中,可以创建 OLE 服务器部件。现在,使用 Visual Basic 创建的部件的功能得到了大大的扩展,包括产生事件的能力、改善对异步回调函数的支持、以及提供 ActiveX 控件及文档的能力。下述主题介绍在使用 Visual Basic 开发软件部件时,应当注意的重要定义和概念。 进程内和进程外部件 定义及主要差异。
    命名的学问 为对象、事件、属性和方法选择的名字会影响部件的可用性。
    选择工程类型和设置工程属性 在开始新部件设计时,根据待设计的部件所要提供的功能,决定使用哪种工程类型。
    多态性、接口、类型库和 GUIDs 部件提供的类的接口是设计者和用户之间的约定,该接口在类型库中说明。类可以有多个由 GUID 标识的接口。
    启动和结束部件 部件设计者需要了解的启动和关闭规则。 
    详细信息 创建 OLE 服务器的核心信息,称之为代码部件,包括“创建 ActiveX DLL”、“创建 ActiveX EXE 部件”、“部件设计的一般准则”、“调试、测试和部署部件”、“建立代码部件”和“ActiveX 部件的标准及指南”。
      

  2.   

    创建 ActiveX DLL
    部件提供了对象形式的可复用代码。要使用部件的代码,应用程序可以创建对象并调用对象的属性及方法,这种应用程序被称作一个客户应用程序。对于使用部件对象的客户应用程序,部件可分为进程内运行的和进程外运行的。进程内部件,或者说 ActiveX DLL,运行在另一个应用程序的进程之中。客户可以是应用程序本身,也可以是该应用程序正在使用的其它进程内的部件。图 2.1   由应用程序或其它进程内部件使用的进程内部件本章以循序渐进的方式建立一个进程内部件 ThingDemo,使用它的类模块说明对象存活期、全局对象、以及控制模式和无模式对话框的对象等概念。另外还将看到在 Microsoft Visual Basic 开发环境中,如何通过同时运行 DLL 和测试工程来调试进程内的 ActiveX DLL。用来创建 ThingDemo 部件的步骤之间存在调用关系。因此,这些步骤的执行顺序是很重要的。主题
     创建 ThingDemo DLL 工程 
    如何为进程内部件设置工程选项。
     
    vbconCreatingPropertiesMethods03 创建 Thing 类的属性和方法 
    添加两个属性和一个方法。
     
    vbconTestingYourOLEDLL 创建 TestThing 测试工程 
    创建一个工程组,包括 ThingDemo 和一个测试工程,由此可以在进程中调试 DLL 工程。
     
     创建并测试 Thing 对象 
    在 TestThing 工程中添加代码,创建 Thing 对象的实例并调用它的属性和方法。
     
    vbconRunningTestApplication03 运行 TestThing 测试程序 
    说明进程内部件提供的对象的存活期。
     
     循环引用和对象存活期 
    进一步探讨对象的存活期,阐述循环引用对关闭部件的影响。
     
    vbconAddingEventToOLEDLLProject 在 ThingDemo 工程中添加窗体 
    添加代码来显示一个模式的或无模式的对话框窗体,使用全局类来控制该窗体。
     
     在 TestThing 中使用全局对象 
    测试全局对象和对话框,同时进一步说明如何调试进程内 DLL。
     
    vbconCreatingTestingOLEDLLExecutable 编译和测试 ThingDemo DLL 
    编译工程。介绍如何利用测试工程测试 .dll 文件,以及如何在其它工程中包含该文件。
     
     循环引用和部件的关闭 
    在客户应用程序释放了所有对进程内部件对象的引用后,Visual Basic 如何卸载该部件。另外还指出循环引用可能会妨碍卸载。
     
    vbconOLEDLLCreationSummary 关于创建 ActiveX DLL 的总结 
    概述设计和创建进程内部件的典型过程。
     
    如果按照下面的方式设置了开发环境,那么执行这些步骤就会更加容易。在开始之前,请按照以下步骤执行: 在“视图”菜单中,单击“工具箱”打开工具箱。
    在“视图”菜单中,单击“工程资源管理器”打开“工程资源管理器”窗口。“工程资源管理器”窗口是用来在工程文件之间进行切换的。
    如果“工程资源管理器”窗口处于下面这样的文件夹模式,单击“工程资源管理器”窗口工具栏上的“切换文件夹”按钮把文件夹关掉。 在“视图”菜单中,单击“属性窗口”打开“属性”窗口。
    在“工具”菜单中,单击“选项”打开“选项”对话框。 
    选择“编辑器”选项卡。选中“要求变量声明”。这样就能够更容易发现输入错误。选择“环境”选项卡。选中“提示保存改变”,然后单击“确定”。这样设置以后,要离开工程的时候将提醒保存工程的修改。
      

  3.   

    ocx是写给编程的人用的
    activex dll是写给最终用户用的以上意见仅供参考
      

  4.   

    ActiveX OCX是一个自定义控件,ActiveX DLL是一个动态库.
    OCX中有usercontrol,也可以包含class,而 DLL只能包括Class.
      

  5.   

    控件和dll在接口上有什么不同?为啥ocx非得有窗体才能用?
      

  6.   

    这就是区别了:OCX要有一个载体,DLL不需要。一般来说,如果你想得到一个“可视”的控件,要做成OCX,如果你想在模块中也能用,只能做成
    DLL
      

  7.   

    回复人: TrueZq(蟑螂) (2002-1-31 19:05:03)  得0分 
    这就是区别了:OCX要有一个载体,DLL不需要。 未必吧,
    编译一个OCX 
    工程名ocxtest 
    usercontrol名 controlhello
    令invisibleatruntime 属性为true加入如下代码
    Public Function hello() As String
    hello = "hello"
    End Function在新建一个工程去掉所有的窗体
    在module中加入如下代码
    Sub main()
    Dim aa As Object
    Set aa = CreateObject("ocxtest.controlhello")
    MsgBox aa.hello
    End Sub
    运行正常,说明ocx并不一定要有载体
      

  8.   

    ActiveX DLL是一个动态联接库
    所以只能是后期绑定即只能用createobject的方法实例化
    ocx则不一定,你可以在设计时把他添加到工具栏,可以用load,new来创建一个它的实例,即前期绑定。
    另外activex dll有些重要的属性usercontrol也没有,比如instancing,mtstransitionmode,persistable