WEB开发网
开发学院软件开发VC COM编程入门:深入COM服务器 阅读

COM编程入门:深入COM服务器

 2006-07-21 11:44:59 来源:WEB开发网   
核心提示: 下面让我们来浏览一下这个过程,这里要涉及到几个不太熟悉的术语,COM编程入门:深入COM服务器(6),但不用着急,后面会对它们作详细讨论,我们先接受这个概念,这里我们指的是单线程服务器,1、客户端程序调用CoCreateInstance(),传递组件对象类的CLSID以及所要接口的IID

下面让我们来浏览一下这个过程。这里要涉及到几个不太熟悉的术语,但不用着急,后面会对它们作详细讨论。

1、客户端程序调用CoCreateInstance(),传递组件对象类的CLSID以及所要接口的IID。
2、COM库在HKEY_CLASSES_ROOT\CLSID.键值下查找服务器的CLSID键值,这个键值包含服务器的注册信息。
3、COM库读取服务器DLL的全路径并将DLL加载到客户端的进程空间。
4、COM库调用在服务器中DllGetClassObject()函数为所请求的组件对象类请求类工厂。
5、服务器创建一个类工厂并将它从DllGetClassObject()返回。
6、COM库在类工厂中调用CreateInstance()方法创建客户端程序请求的COM对象。
7、CreateInstance()返回一个接口指针到客户端程序。

COM服务器注册

COM服务器必须在Windows注册表中正确注册以后才能正常工作。如果你看一下注册表中的HKEY_CLASSES_ROOT\CLSID键,就会发现大把大把子键,它们就是在这个计算机上注册的COM服务器。当某个COM服务器注册后(通常是用DllRegisterServer()进行注册),就会以标准的注册表格式在CLSID键下创建一个键,它名字为服务器的GUID。下面是一个这样的例子:

{067DF822-EAB6-11cf-B56E-00A0244D5087}

大括弧和连字符是必不可少的,字母大小写均可。

这个键的默认值是人可值别的组件对象类名,使用VC所带的OLE/COM对象浏览器可以察看到它们。

在GUID键的子键中还可以存储其它信息。需要创建什么子键依赖于COM服务器的类型以及COM服务器的使用方法。对于本文例子中这个简单的进程内服务器,我们值需要一个子键:InProcServer32。

InProcServer32键包含两个串:这两个串的缺省值是服务器DLL的全路径和线程模型值(ThreadingModel)。线程模型超出了本文所涉及的范围,我们先接受这个概念,这里我们指的是单线程服务器,用的模式为Apartment(即单线程公寓)。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:COM 编程 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接