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

来源: 作者: 2007-12-13 出处:pcdog.com

dos  安全  多线程  注册表  
上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 

  要创建新的COM对象引用,就必须调用这个函数通知COM对象这个新引用成立。在AddRef()调用中的强制转换IUnknown*看起来好像多余,但是在QI()中初始化的*ppv有可能不是IUnknown*类型,所以最好是养成习惯对之进行强行转换。。

  上面我们已经讨论了一些DLL服务器的内部细节,接下来让我们回头看一看当客户端调用CoCreateInstance()时是如何处理服务器的。

  深入CoCreateInstance()

  在本文的第一部分中,我们见过CoCreateInstance()API,其作用是当客户端请求对象时,用它来创建对象。从客户端的立场看,它是一个黑盒子。只要用正确的参数调用它即可得到一个COM对象。它并没有什么魔法,只是在一个定义良好的过程中加载COM服务器,创建请求的COM对象并返回所要的指针。就这些。

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

  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。


更多内容请看PCdog.com--FTP服务器  代理服务器技术  刀片服务器专题
上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 
上一篇:应用服务器的技术发展趋势
下一篇:多层C/S的客户端调用服务器端的方法