在完成所有的进程外源代码编辑后,生成了相应的.exe文件。根据书上说“COM解决的办法是维护一个被登记的类厂的内部表格,根据客户请求的CLISD得到相应的类厂。若找不到相应类厂,COM将在注册表中查找并启动相应的EXE,此EXE可调用COM函数CoRegisterClassObject完成类厂的登记,以便COM能找到它们。”应该是客户端根据注册表自动启动.exe组件服务器,在我实际操作过程中始终如法达到这一点,只能是先启动服务器。
后来才发现是复用了注册文件register.cpp, 没有修改关于地址值键值的名称。书上原话是——本地服务器将把相应的EXE文件的位置登记在关键字LocalServer32下而不是InProcServer下。
相应的代码修改为:
#ifdef OUTPROC_SERVER
setKeyAndValue(szKey, “LocalServer32”, szModule) ;
#else
setKeyAndValue(szKey, “InprocServer32”, szModule) ;
#endif
之后可以查看注册表,地址在LocalServer32下,客户端启动COM组件正常。
切记:复用代码时不同点的修改。