我的分布式服务器组件 在本地机和远程机上都有,但是我想启动远程机的组件, 改怎么写创建组件的代码呢? 
我不想删掉本机上的组件和注册表注册项~~~   以便代码改一下就可以随便启动远程的或者本机的.我先在这里谢谢你们了~~~

解决方案 »

  1.   

    1、类似如下代码:
    void CInvokeCom01Dlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here
        //组件库初始化
        HRESULT hr =  CoInitialize(NULL);

        //安全代码初始化
        hr = CoInitializeSecurity(
            NULL, 
            -1,
            NULL, 
            NULL, 
            RPC_C_AUTHN_LEVEL_DEFAULT, //代理的访问默认验证,这个和服务器端dcomcnfg配置时【默认属性】中【默认身份验证级别】所对应,例如:RPC_C_AUTHN_LEVEL_DEFAULT对应的是“默认值”,RPC_C_AUTHN_LEVEL_NONE对应的则是“无”
            RPC_C_IMP_LEVEL_IDENTIFY, //代理扮演级别,和服务器端dcomcnfg配置时【默认属性】中【默认模拟级别】,对应的dcomcnfg配置图:

            NULL, 
            0,
            NULL 
    );

        //创建对象实例,并返回IUnknown 指针
        COSERVERINFO ServerInfo={0,L"Zidane",NULL,0};//组件服务器信息,”zht”为组件服务器的计算机名字
        MULTI_QI MultiQi={&IID_IUnknown,NULL,NOERROR};
        hr=CoCreateInstanceEx(CLSID_Obj01,NULL,CLSCTX_REMOTE_SERVER,&ServerInfo,1,&MultiQi);// CLSCTX_REMOTE_SERVER为远程进程外组件
        IUnknown* pUnknown = (IUnknown*) MultiQi.pItf;// 得到IUnknown指针

        //通过IUnkonwn指针去查询接口指针,返回IAccount指针
    IObj01* pFoo = NULL;
        hr = pUnknown->QueryInterface(IID_IObj01,(void**)&pFoo);

    hr = CoCreateInstance(CLSID_Obj01, NULL, CLSCTX_INPROC_SERVER| CLSCTX_INPROC_HANDLER| CLSCTX_LOCAL_SERVER| CLSCTX_REMOTE_SERVER, IID_IObj01, (void**)&pFoo);
    if (SUCCEEDED(hr) && (pFoo != NULL))
    {
    int num=1;
    pFoo->changeInt(&num);
    pFoo->Release();
    CString s;
    s.Format("The number is : %d",num);
    MessageBox(s);
    }
    else
    {
    CString msg;
    msg.Format("%ld",hr);
    AfxMessageBox(msg);
    }

        //Iunknown接口释放
        pUnknown->Release();

    CoInitialize(NULL);

    }2、配置客户端、服务器端,这个可以搜索一下版面。
      

  2.   

    楼上的, 你的第二次CoCreateInstance 函数是什么意思? 不是已经建立了一个CLSID_Obj01组件了吗?
    还有我不清楚,如果本机注册表已经注册了该组件,那么想你说做的能不能启动远程的呢?  dcom有自己优化的,优先启动本机的组件来优化组件的调用~~~