本帖最后由 hyblusea 于 2009-12-15 18:08:19 编辑

解决方案 »

  1.   

    产生多个进程的原因是在注册类厂时出问题。
    调用CoRegisterClassObject注册类厂时第四个参数必须是REGCLS_MULTIPLEUSE属性。
    如果第四个参数为REGCLS_MULTI_SEPARATE就会导致参数多个进程,也就是多个EXE程序
      

  2.   

    给你参考一下
    http://blog.chinaunix.net/u/18544/showart_1354558.html
      

  3.   


    我在代码中找到的是:
    // 通过 CoRegisterClassObject() 注册类工厂。
    if (FAILED(_AtlModule.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE)))
        return FALSE;这代码好像是IDE为我生成的,已经是REGCLS_MULTIPLEUSE了。
      

  4.   

    更奇怪的是,我把B作为服务器, A和B都连接到B的COM,这时,在B计算机就只有1个进程了。真的是让我一头雾水。
      

  5.   

    if (FAILED(_AtlModule.RegisterClassObjects(CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER, REGCLS_MULTIPLEUSE)))
        return FALSE; 
      

  6.   

    你参考一下这个例子
    http://www.codeproject.com/KB/COM/clientserverwithdcom.aspx
      

  7.   


    在我的COM里面,找不到  CServiceModule::Run与这个例子里面的代码相差很大啊,是不是因为我是用VS2005创建的关系?。
      

  8.   

    我这样写了:HRESULT InitializeSecurity() throw()
    {
    // TODO : 调用 CoInitializeSecurity 并为服务提供适当的 
    // 安全设置
    // 建议 - PKT 级别的身份验证、
    // RPC_C_IMP_LEVEL_IDENTIFY 的模拟级别
    // 以及适当的非 NULL 安全说明符。 return CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_NONE,  RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL); }但是也没有用。