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

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

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

  服务器注册以及反注册

  前面讲过服务器实现了DllRegisterServer()和DllUnregisterServer()两个函数。它们的工作是创建和

  删除关于COM服务器的注册表入口。其代码都是对注册表的处理,所以在此不必赘言,只是列出DllRegisterServer()创建的注册表入口:

  键名

  键值

  HKEY_CLASSES_ROOT

  CLSID
{7D51904E-1645-4a8c-BDE0-0F4A44FC38C4}

  Default="SimpleMsgBox class"

  InProcServer32

  Default=[path to DLL]; ThreadingModel="Apartment"

  关于例子代码的注释

  本文的例子代码在一个WORKSPACE(工作间)文件中(SimpleComSvr.dsw)同时包含了服务器的源代码和测试服

  务器所用的客户端源代码。在VC的IDE环境中可以同时加载它们进行处理。在工作间的同级层次有两个工程都要

  用到的头文件,但每个工程都有自己的子目录。

  同级的公共头文件是:

  ISimpleMsgBox.h——定义ISimpleMsgBox的头文件。

  SimpleMsgBoxComDef.h——包含__declspec(uuid())的声明。这些声明都在单独的文件中,因为客户

  端需要CSimpleMsgBoxImpl的GUID,不是它的定义。将GUID移到单独的文件中,使客户端在存取GUID时不依赖

  CSimpleMsgBoxImpl的内部结构。它是接口,ISimpleMsgBox,对客户端很重要。

  正如前面所说的,必须用.DEF文件来从服务器输出四个标准的输出函数。下面是例子工程的.DEF文件:

  EXPORTS
  DllRegisterServer  PRIVATE
  DllUnregisterServer PRIVATE
  DllGetClassObject  PRIVATE
  DllCanUnloadNow   PRIVATE

  每一行都包含函数名和PRIVATE关键字。这个关键字的意思是:此函数是输出函数,但不包含在输入库(import lib)中。也就是说客户端不能直接从代码中调用这个函数,即使是链接了输入库也不行。这个关键字时必须要用的,否则链接器会出错。

  在服务器中设置断点链

  如果你想在服务器代码中设置断点,有两种方法:第一种是将服务器工程(MsgBoxSvr)设置为活动工程,然后开始调试。MSVC将问你调试会话要运行的可执行程序。输入客户端测试程序的全路径,你必须事先建立好。第二种方法是将客户端工程(TestClient)设置为活动工程,配置工程的从属(dependencies)属性,以便服务器工程从属于客户端工程。这样如果你改变了服务器的代码,那么在编译客户端工程时会自动重新编译服务器工程代码。最后还要做的是当你开始调试客户端时必须告诉MSVC加载服务器符号(symbols)。


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