《com 原理与应用》第四章的进程外组件例子程序 
为什么我总是必须事先手动运行组件程序 Dictionary.exe 之后,再运行DictCtrl.exe 才能正确显示结果,否则只会显示 Create object failed! 我可也是事先注册了DictPrxy.dll 的呀:(

解决方案 »

  1.   

    是否修改了Dictionary.exe main中的代码?
      

  2.   

    我没有修改呀,我直接从CSDN上面下载来的,网址是:http://download.csdn.net/source/204715
    而且前面几章的程序运行的都很好,好奇怪:(
      

  3.   

    怎么没有人回答?分数不多,实在不好意思,我的可用分等级是:乞丐
    希望多多指教:)
    我这大半年来看了《C++ Primer》和《C++ 标准程序库》,自问看书的时候还是蛮用心的,书上的程序我都调试过了,其他的《Effective C++》系列和《Exceptional C++》系列在这期间也穿插着看,可是最近看潘爱民的《Com 原理与应用》前三章还好,从第四章开始“聚合”之后就感觉好吃力,特别是太多宏定义,是不是我还些基础的书本没有看啊?
      

  4.   

    不是光注册代理与残根dll就能解决问题,服务端的exe组件也必须同时注册。
      

  5.   

    to paerxiushi:
    你好,请问服务端的exe组件应该怎么注册?也是用 regsvr32 吗?好像 regsvr32 只能注册 dll 或者 ocx
      

  6.   

    to 路过的朋友: 
    你好,请问服务端的exe组件应该怎么注册?是自动注册,还是手动注册阿?
      

  7.   

    你将组件命令行参数设置成/register为注册服务器,/unregister为注销服务器,/Embedding为内嵌式服务器。
    当注册服务器exe时,使用命令行/register,注销则是/unregister注册组件服务器,需要向注册表加入如下键值:
    假设组件Aggregeate221中有一个类为CA,它的当前版本为1,那么组件的ProgID,也就是组件的友好名称为:
    Aggregate221.CA(版本无关的ProgID),Aggregate221.CA.1(版本相关的ProgID)
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}下建立默认键值Aggregate221.CA
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}\LocalServer32
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}\LocalServer32下建立默认键值,设置服务器exe路径
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}\ProgID
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}\ProgID建立默认键值,ProgID名称
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}\ersionIndependentProgID建立默认键值,版本无关的ProgIDHKEY_CLASSES_ROOT\Aggregate221.CA.1
    HKEY_CLASSES_ROOT\Aggregate221.CA.1建立默认键值,Aggregate221.CA.1 class
    HKEY_CLASSES_ROOT\Aggregate221.CA.1\CLSID
    HKEY_CLASSES_ROOT\Aggregate221.CA.1\CLSID建立默认键值,Aggregate221.CA
    HKEY_CLASSES_ROOT\Aggregate221.CA
    HKEY_CLASSES_ROOT\Aggregate221.CA建立默认键值,Aggregate221.CA Class
    HKEY_CLASSES_ROOT\Aggregate221.CA\CLSID
    HKEY_CLASSES_ROOT\Aggregate221.CA.1\CLSID建立默认键值,Aggregate221.CA
    HKEY_CLASSES_ROOT\Aggregate221.CA\CLSID\CurVer
    HKEY_CLASSES_ROOT\Aggregate221.CA\CLSID\CurVer建立默认键值,Aggregate221.CA.1
    注销时,则需要清除这些键值与键名当组件启动时,使用CoRegisterClassObject来注册类对象,使用CoRevokeClassObject来注销类对象
    查询接口还是使用CreateInstance,只不过传入CLSCTX_LOCAL_SERVER而已
      

  8.   

    第三行改成:
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}\ersionIndependentProgID建立默认键值,版本无关的ProgID 
      

  9.   

    第三行改成: 
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}\VersionIndependentProgID建立默认键值,版本无关的ProgID 
      

  10.   

    错了,第十三行改成: 
    HKEY_CLASSES_ROOT\CLSID\{363963DD-2458-4bb7-BE51-7084A55B369D}\VersionIndependentProgID建立默认键值,版本无关的ProgID