第八章对象链接与嵌入二内容摘要:

直接引用。 如果要使外部控制器对自动化对象进行操作,则要在声明自动化对象的单元中调用 Automation. RegisterClass 进行注册。 例程 MemoAuto 单元定义了 TMemoApp 对象并进行注册。 unit MemoAuto „ type TMemoApp = Class(TAutoObject) implementation „ procedure RegisterMemoApp Const AutoClassInfo : TAutoClassInfo = ( AutoClass : TMemoApp。 ProgID : MemoEdit,Application ClassIn : 39。 {FIFF4880 200D 11CF BDCF D020AFOE5B81}39。 Description : 39。 Memo Editor Application39。 Instancing : acSingle Instance )。 begin Automation,RegisterClass(AutoClassInfo) end。 inibialization RegisterMemoApp。 end。 自动化对象要在 initialization 部分中对自动化对象进行注册。 注册的信息用以唯一辨识服务器对象。 把一个自动化对象加入到服务器中要用到这些信息。 程序一旦注册了自动化对象,全局自动化对象将用 OLE自动化API 进行自动管理。 注册后的 OLE 自动化对象是引用记数的,因为对象可能被多个控制器控制。 当使用完一个 OLE 对象,调用 Release 方法, Release 可减少引用数目,当引用数目为零时,调用 Free 方法释放对象。 通常把 OLE 对象作为变体类型 (variants)进行输出,任何 OLE 对象的方法和属性必须返回一个包含 OLE 对象的变体类型, TAutoObject 提供了一个变体类型的 OLEObject 属性。 控制器不能直接得到服务器中的类或指针,而是引用 OLE对象的 OLEObject 属性。 例程 MemoAuto单元的 NewMemo函数就是通过引用 OLEObject 属性而提供引用 TMemoDoc 对象的接口。 function TMemoApp,NewMemo : Variant。 begin Result := MainForm,CreateMemo(39。 39。 ),OleObject。 end。 创建 OLE 自动化服务器 OLE 自动化服务器是应用程序或动态链接库 (DLL),它可向 OLE 自动化控制器输出 OLE 对象。 MemoEditdpr 就是 OLE 自动化服务器, 在 MemoAuto 单元中注册了 自动化类,所有 OLE 控制器均可对 进行引用。 在 Windows环境下有两种 OLE自动化服务器,进程内服务器和进程外服务器, Delphi 可创建这两种服务器。 进程内服务器是输出 OLE 自 动化对象的动态链接库。 因为 OLE 自动化对象来自于 DLL, 对象是控制器程序的同一窗体进程,进程内服务器适合于创建共享的程序模块, 而这个模块可以被用不同语言编写的多个程序所共享。 进程内服务器被调用时在同一地址中运行,这样就不需要控制器进行调度,以避免处理大量的消息句柄。 进程外服务器是能输出 OLE 自动化对象的应用程序。 有些 OLE 自动化服务器只能创建和输出一个 OLE 对象,有些服务器则可以处理多个 OLE 对象,另外一些服务器不能输出 OLE 对象,只能在程序内部使用 OLE对象。 服务器与其能输出的对象数目的关 系称为实例 (instancing)。 在创建 OLE 自动化对象时必须定义实例, 这样, 在创建一个 OLE 自动化对象时, Windows 就能决定是否创建一个新的服务器实例。 表 列出三种实例类型。 表 实例的取值及含义 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ instancing。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。