哪儿有可以跨网访问的dcom的小例题,同时提供源代码,一次性全给(客户端和服务器都要)

解决方案 »

  1.   

    刚开始做DCom可能麻烦的地方在配置。
    我这里有个很早以前做的Demo。
    如果你需要,把EMail短消息给我。顺便写下调用代码:
    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.   

    假如想要的话,可以给我发邮件,前一段时间刚好做dcom,自信对dcom安全有一定的了解。
     [email protected]
      

  3.   

    建议你用web service,通过gSOAP用VC6写web service也比较容易