CoClass(即COM接口类),实例化模式和线程模型
2012-05-14 14:59
218 查看
然后将显示Remote Data Module向导(见图15.2)。该向导过程中,您需要输入CoClass(即COM接口类)的名字、实例化模式和线程模型。
COCLASS名 当在Remote Data Module向导中输入CoClass名字时,实际是在定义自动化接口的类名。该值将成为远程数据模块的name特性,加上前缀T后,就是数据模块的类名。新的远程数据模块继承了TRemoteDataModule类并实现了CoClass接口。例如,如果在向导过程的CoClass域键入server,那么远程数据模块的类名就是TServer,而CoClass名字则是CoServer,接口是IServer。使用给出的例子,数据模块中的类定义如下:
TServer = class(TRemoteDataModule, IServer)
该模块的var语句如下:
var
Server : TServer;
继续上面的例子,将创建包含Microsoft IDL(Interface Definition Language,接口定义语言)的类型库server.tlb,以及包含接口定义的Object Pascal语法的Pascal文件server_TLB.pas。
自动化服务器要支持的任何特性和方法都必须使用Type Library编辑器来定义(见图15.3)。如果使用类型库编辑器,则Delphi将负责维护类型库的Pascal代码和Microsoft IDL文件。稍后我们将继续讨论Type Library编辑器。
图15.3 用于定义接口和管理Microsoft IDL的Type Library编辑器
实例化模型 实例化模型表示如何启动应用程序。有三种实例化模型,分别是Internal Instance、Single Instance和Multiple Instance。对于进程内自动化服务器,可使用Internal Instance模型,即DLL服务器。如果每个客户程序都运行服务器程序的一个实例,则使用Single Instance模型。如果客户程序共享服务器程序,则使用Multiple Instance模型;但每个客户程序都有自己的服务器实例--即Remote Data Module,这些实例在同一进程空间中运行。
线程模型 可用的线程模型包括Single、Apartment、Free、Both和Neutral。Single线程模型的服务器将序列化对COM对象的调用。而远程数据模块每次只处理一个请求,从而避免了多线程的问题。Apartment线程模型对远程数据模块的单一实例,每次只允许发出一个请求;但可以有多个远程数据模块的实例存在,每个实例分别处理不同的请求。Apartment模型同样需要保护全局数据,以避免线程冲突。
COCLASS名 当在Remote Data Module向导中输入CoClass名字时,实际是在定义自动化接口的类名。该值将成为远程数据模块的name特性,加上前缀T后,就是数据模块的类名。新的远程数据模块继承了TRemoteDataModule类并实现了CoClass接口。例如,如果在向导过程的CoClass域键入server,那么远程数据模块的类名就是TServer,而CoClass名字则是CoServer,接口是IServer。使用给出的例子,数据模块中的类定义如下:
TServer = class(TRemoteDataModule, IServer)
该模块的var语句如下:
var
Server : TServer;
继续上面的例子,将创建包含Microsoft IDL(Interface Definition Language,接口定义语言)的类型库server.tlb,以及包含接口定义的Object Pascal语法的Pascal文件server_TLB.pas。
自动化服务器要支持的任何特性和方法都必须使用Type Library编辑器来定义(见图15.3)。如果使用类型库编辑器,则Delphi将负责维护类型库的Pascal代码和Microsoft IDL文件。稍后我们将继续讨论Type Library编辑器。
图15.3 用于定义接口和管理Microsoft IDL的Type Library编辑器
实例化模型 实例化模型表示如何启动应用程序。有三种实例化模型,分别是Internal Instance、Single Instance和Multiple Instance。对于进程内自动化服务器,可使用Internal Instance模型,即DLL服务器。如果每个客户程序都运行服务器程序的一个实例,则使用Single Instance模型。如果客户程序共享服务器程序,则使用Multiple Instance模型;但每个客户程序都有自己的服务器实例--即Remote Data Module,这些实例在同一进程空间中运行。
线程模型 可用的线程模型包括Single、Apartment、Free、Both和Neutral。Single线程模型的服务器将序列化对COM对象的调用。而远程数据模块每次只处理一个请求,从而避免了多线程的问题。Apartment线程模型对远程数据模块的单一实例,每次只允许发出一个请求;但可以有多个远程数据模块的实例存在,每个实例分别处理不同的请求。Apartment模型同样需要保护全局数据,以避免线程冲突。
相关文章推荐
- ActiveMQ-JMS(四):回调模式下的线程模型
- Android-线程通讯设计模式-Handler消息模型
- 单例模式(控制线程内唯一实例化对象)
- Netty学习之旅------线程模型前置篇Reactor反应堆设计模式实现(基于java.nio)
- eventloop & actor模式 & Java线程模型演进 & Netty线程模型 总结
- 深度剖析java线程安全|内存模型|生产消费者模式|
- [并发并行]_[线程模型]_[Pthread线程使用模型之二 工作组work crew]
- Mycat开发实践---MyCAT线程模型分析
- 网络编程之 Socket的模式(二) --- “Linux网络I/O模型”
- java线程基础巩固---策略模式在Thread和Runnable中的应用分析
- 再从main()函数看起 --- 模式、模块、线程和槽
- memcached线程模型
- 线程并发集合实现java生成消费模型(ArrayBlockingQueue和ConcurrentMap)
- Com线程模型
- C# 线程知识--异步编程模型(APM)
- 03_ARM汇编自学笔记模型之处理器模式
- 分析模式:可复用的对象模型
- 黑马程序员_Java基础_线程基础,创建,同步(单例设计模式的同步),死锁
- Java 线程/内存模型的缺陷和增强
- epoll模型的EPOLLLT模式和EPOLLET模式比较