深入探索COM服务器:多类支持、对象创建与优化实践
1. 多类支持的COM服务器
在COM编程中,我们创建的DLL可以作为一个容器,用于实现与特定CLSID相关联的类。例如,我们创建的DLL是类CVcr的实现载体,CVcr类实现了与CLSID_VCR相关的接口,这样的DLL被称为COM服务器。实际上,一个COM服务器可以容纳多个类,COM也支持服务器支持多类的概念。
当一个服务器支持多个类时,DllGetClassObject函数需要根据传入的CLSID来确定返回哪个类的实例。下面是一些COM相关的术语:
- 接口(Interface) :是客户端和服务器之间通信的抽象定义,如IVideo和ISVideo。
- 实现(Implementation) :是一个具体的数据类型,通过为接口的每个方法提供程序代码来支持一个或多个接口,在我们的例子中是C++类CVcr。
- COM对象(COM Object) :是实现类的一个实例,例如“new CVcr”。
- 组件类(Coclass) :是一个命名声明,代表具体可实例化的类型以及它所暴露的潜在接口列表,在我们的例子中是IDL声明“coclass VCR”。
2. 类的多实例创建问题
假设电视客户需要画中画功能,这意味着客户端需要创建VCR类的两个实例。我们可能会想到调用CoGetClassObject两次来实现,但这种方法效率不高,因为每次调用CoGetClassObject都会执行LoadLibrary、GetProces
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



