• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            萬星星@豌豆莢 歡迎加入我們
            一個吃軟飯的男人!!!!!我只想寫程序####
            微博:http://weibo.com/wanlianwen
            posts - 172,  comments - 1253,  trackbacks - 0

            學習 COM 的時候,一直強調 COM 的位置透明,但是始終感覺不到透明,組件都是本機注冊的。知道分布式 COM 其實就是 DCOM 可以實現遠程調用組件,但是一直懶于看,遲遲沒有很好理解。眼看著分布式軟件設計這么流行, .NET 、 J2EE 大行其道,橫下心先把 DCOM 拿下。至于 DCOM 好處我不多說,上網 google 一下,最大的缺點是配置麻煩,尤其是存在防火墻的時候更麻煩(網上說的,我沒有防火墻,呵呵)。

            簡單介紹?

            從這個圖看看客戶端和服務器端分別需要什么(由于開始沒有理解,客戶端接口查詢老失敗,花費我半天時間)

            客戶端:客戶程序、代理 / 存根

            服務器端:服務器組件、代理 / 存根

            這里可以看出 DOM 是針對 COM 遠程調用( RPC )的實現,封裝了底層通信。有些程序開發就是在使用 Socket DCOM 之間選擇。

            ?

            一個 DCOM 程序實現

            實現一個簡單的功能: DCOM 組件提供一個接口方法獲取歡迎信息,客戶端調用接口獲取信息并顯示。

            創建 DCOM 組件

            打開 VC6 ,首選創建一個 ATL 工程 DComServer

            選擇完成。

            添加一個 ATL 組件,取名 Server ,添加一個接口方法:

            實現方法:

            STDMETHODIMP?CServer::GetInfo(BSTR? * pbstrInfo)
            {
            ???????
            // ?TODO:?Add?your?implementation?code?here
            ??????? if (pbstrInfo)
            ???????
            {
            ??????????????
            * pbstrInfo? = ?SysAllocString(L " 你好,這里是DCOM服務器! " );
            ???????}

            ???????
            return ?S_OK;
            }

            打開Settings,進行工程設置:

            編譯可以發現項目目錄下面生成了 DComServerps.dll ,這個就是代理存根,需要在客戶和服務器注冊。

            創建客戶端調用(一個基于對話框的 MFC 程序) (記的要初始化 COM 庫)

            實現連接和獲取消息按鈕事件:

            void ?CDComClientDlg::OnButtonConnect()?
            {
            ????
            // ?TODO:?Add?your?control?notification?handler?code?here
            ????COSERVERINFO????serverInfo;
            ????MULTI_QI????????multiQi????????
            = ? { & IID_IServer,?NULL,?NOERROR} ;
            ????HRESULT????????????hr????????????
            = ?NOERROR;
            ????UpdateData(TRUE);
            ????
            // ?如果已經連接上
            ???? if (m_pIServer)
            ????
            {
            ????????m_pIServer
            -> Release();
            ????????m_pIServer?
            = ?NULL;
            ????}

            ????ZeroMemory(
            & serverInfo,? sizeof (COSERVERINFO));
            ????serverInfo.pwszName?
            = ?m_strServer.AllocSysString();
            ????
            // ?創建遠程組件
            ????hr? = ?CoCreateInstanceEx(
            ????????CLSID_Server,
            ????????NULL,
            ????????CLSCTX_REMOTE_SERVER,
            ????????
            & serverInfo,
            ????????
            1 ,
            ????????
            & multiQi);
            ????
            // ?釋放字符串指針
            ????SysFreeString(serverInfo.pwszName);
            ????
            if (SUCCEEDED(hr))
            ????
            {
            ????????m_pIServer?
            = ?(IServer * )multiQi.pItf;
            ????????AfxMessageBox(_T(
            " 連接成功! " ));
            ????}

            ????
            else
            ????
            {
            ????????AfxMessageBox(_T(
            " 連接失敗! " ));
            ????}

            }


            void ?CDComClientDlg::OnButtonGetmessage()?
            {
            ????
            // ?TODO:?Add?your?control?notification?handler?code?here
            ????BSTR????bstrInfo;
            ????USES_CONVERSION;
            ????
            if (m_pIServer)
            ????
            {
            ????????m_pIServer
            -> GetInfo( & bstrInfo);
            ????????AfxMessageBox(W2A(bstrInfo));
            ????}

            ????
            else
            ????
            {
            ????????AfxMessageBox(_T(
            " 請連接DCOM服務! " ));
            ????}

            }

            ?

            部署客戶端

            這個地方有網上說很麻煩,需要關閉防火墻、需要用戶名一致等,不過我還好,服務器是 Win2k sp4 administrator 帳戶,客戶端是 Win2k3 sp1 administrator 帳戶,一次性就可以創建遠程組件,就是查詢接口時候老是失敗。花了半天時間上網才發現需要注冊代理存根 dll ,就是編譯 DComServer 之前需要設置的。

            拷貝 DComServer 下的 DComServerps.dll DComClient Debug 里面的 DComClient.exe 到客戶端,使用 regsvr32 注冊 DComServerps.dll ,運行 DComClient.exe 。

            連接 DCOM 服務:

            服務器進程自動啟動:

            獲取消息:

            ?
            代碼下載。(里面有說明)

            ?

            posted on 2006-07-10 11:25 萬連文 閱讀(2711) 評論(8)  編輯 收藏 引用 所屬分類: ATL

            FeedBack:
            # re: 分布式設計之DCOM實現
            2006-07-10 18:58 | LOGOS
            汗.你要用RPC的話,用web service比DCOM好多了.  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2006-07-14 00:07 | hi
            兄弟,dcom微軟已經不再進行后期研發維護了,都改com+,Dot Net呢!  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2006-07-14 10:08 | 萬連文
            謝謝以上兩個兄弟對我的友情提示,我知道技術越用越簡單,我覺得自己應該一步一個腳印走過去,很難說.NET技術底層實現思想很大超越COM。  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2007-03-18 10:58 | 小橋
            .NET本身就是個COM  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2007-03-18 10:59 | 小橋
            望交流,QQ:2220911  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2008-07-07 12:03 | liyongcheng
            客戶端傳遞給服務器一個字符串怎么實現。


              回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2008-07-07 23:07 | lwan
            服務器添加一個接口傳遞字符串應該就可以了吧  回復  更多評論
              
            # re: 分布式設計之DCOM實現
            2011-12-05 12:53 | lhh
            DCOM 跨機訪問總是出權限問題, CoCreateInstanceEx返回ACCESSDENIED,請問該如何解決?  回復  更多評論
              
            簡歷下載
            聯系我

            <2011年6月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            常用鏈接

            留言簿(66)

            隨筆分類

            隨筆檔案

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            精品久久久久成人码免费动漫| 久久久WWW成人免费精品| 日本久久久久亚洲中字幕| 亚洲精品美女久久777777| 精品久久久久久国产| 激情五月综合综合久久69| 伊人久久一区二区三区无码| 久久亚洲日韩精品一区二区三区| 国产日产久久高清欧美一区| 人妻系列无码专区久久五月天| 亚洲AV日韩精品久久久久| 国产亚洲精品美女久久久| 久久不见久久见免费影院www日本| 久久精品国产男包| 久久夜色精品国产亚洲| 久久久这里有精品| 亚洲嫩草影院久久精品| 亚洲精品99久久久久中文字幕 | 久久婷婷激情综合色综合俺也去| 九九99精品久久久久久| 香蕉久久夜色精品国产2020| 久久99精品久久久久久| 囯产极品美女高潮无套久久久| 91久久九九无码成人网站| 久久午夜羞羞影院免费观看| 久久人人爽人人爽人人片AV麻烦| 久久91精品国产91久久户| 亚洲AV无码久久| 久久夜色精品国产亚洲| 欧美日韩精品久久久久 | 国产精品一区二区久久不卡| 亚洲性久久久影院| 久久精品中文字幕第23页| 国产精品久久波多野结衣| 男女久久久国产一区二区三区| 国内精品久久久久影院薰衣草| 亚洲欧洲精品成人久久奇米网| 久久久久国产视频电影| 久久久无码精品午夜| 久久综合亚洲色HEZYO国产| 欧美国产成人久久精品|