服务器注册以及反注册
前面讲过服务器实现了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服务器 代理服务器技术 刀片服务器专题
