青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

VC++中調用Com組件的方法詳解

Posted on 2009-09-04 23:40 S.l.e!ep.¢% 閱讀(734) 評論(0)  編輯 收藏 引用 所屬分類: COM

Requirement:
1.創建myCom.dll,該COM只有一個組件,兩個接口IGetRes--方法Hello(),
?? IGetResEx--方法HelloEx()
2.在工程中導入組件或類型庫
?? #import "組件所在目錄myCom.dll" no_namespace
??????? 或
?? #import "類型庫所在目錄myCom.tlb"
?? using namespace MYCOM;

---------------------------------------------------------------------------------------------------------------

--Method 1-------------------------------------------------------
?? CoInitialize(NULL);
?? CLSID clsid;
?? CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
?? CComPtr<IGetRes> pGetRes;//智能指針
?? pGetRes.CoCreateInstance(clsid);
?? pGetRes->Hello();
?? pGetRes.Release();//小心哦!!請看最后的“注意”
?? CoUninitialize();
--Method 2---------------------------------------------------------
?? CoInitialize(NULL);
?? CLSID clsid;
?? HRESULT hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
?? IGetRes *ptr;
?? hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
???????????????? __uuidof(IGetRes),(LPVOID*)&ptr);
?? ptr->Hello();
?? CoUninitialize();
--Method 3--------------------------------------------------------
?? CoInitialize(NULL);
?? HRESULT hr;
?? CLSID clsid;
?? hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
?? IGetRes* ptr;
?? IGetResEx* ptrEx;

?? //使用CoCreateClassObject創建一個組件(特別是mutilThreads)的多個對象的
???? 時候,效率更高.
?? IClassFactory* p_classfactory;
?? hr=CoGetClassObject(clsid,CLSCTX_INPROC_SERVER,
?????????????????????? NULL,IID_IClassFactory,
?????????????????????? (LPVOID*)&p_classfactory);
?? p_classfactory->CreateInstance(NULL,__uuidof(IGetRes),
????????????????????????????????????????? (LPVOID*)&ptr);
?? p_classfactory->CreateInstance(NULL,__uuidof(IGetResEx),
????????????????????????????????????????? (LPVOID*)&ptrEx);
?? ptr->Hello();
?? ptrEx->HelloEx();
?? CoUninitialize();
--Method 4--------------------------------------------------------
??? 直接從dll中得到DllGetClassObject,接著生成類對象及類實例(這方法可以
使組件不用在注冊表里注冊,這是最原始的方法,但這樣做沒什么意義,至少失去了COM
對用戶的透明性),不推薦使用.

typedef HRESULT (__stdcall * pfnHello)(REFCLSID,REFIID,void**);
?? pfnHello fnHello= NULL;
?? HINSTANCE hdllInst = LoadLibrary("組件所在目錄myCom.dll");
?? fnHello=(pfnHello)GetProcAddress(hdllInst,"DllGetClassObject");
?? if (fnHello != 0)
?? {
?? IClassFactory* pcf = NULL;
?? HRESULT hr=(fnHello)(CLSID_GetRes,IID_IClassFactory,(void**)&pcf);
?? if (SUCCEEDED(hr) && (pcf != NULL))
?? {
?? IGetRes* pGetRes = NULL;
?? hr = pcf->CreateInstance(NULL, IID_IFoo, (void**)&pGetRes);
?? if (SUCCEEDED(hr)?? && (pFoo != NULL))
?? {
?? pGetRes->Hello();
?? pGetRes->Release();
?? }
?? pcf->Release();
?? }
?? }
?? FreeLibrary(hdllInst);
--Method 5-------------------------------------------------------
??? 通過ClassWizard利用類型庫生成包裝類,不過前提是com組件的接口必須是派
生自IDispatch,具體方法:
??? 調出添加類向導(.NET中),選擇類型庫中MFC類,打開,選擇"文件",選擇
"myCom.dll"或"myCom.tlb",接下來會出來該myCom中的所有接口,選擇你想
生成的接口包裝類后,向導會自動生成相應的.h文件.這樣你就可以在你的MFC中
像使用普通類那樣使用組件了.(CreateDispatch("myCom.GetRes") 中的參數就是ProgID通過Clsid在注冊表中可以查詢的到)

?? CoInitialize(NULL);
?? CGetRes getRest;
?? if (getRest.CreateDispatch("myCom.GetRes") != 0)
?? {
?? getRest.Hello();
?? getRest.ReleaseDispatch();
?? }
?? CoUninitialize();
--注意--------------------------------------------------------------
???? COM中的智能指針實際上是重載了->的類,目的是為了簡化引用記數,幾不需要程序
員顯示的調用AddRef()和Release(),但是為什么我們在Method 1中
pGetRes.Release(),問題在與,我們的智能指針pGetRes生命周期的結束是在
CoUninitialize()之后,CoInitialize所開的套間在CoUninitialize()后已經被
關閉,而pGetRes此時發生析構,導致了程序的崩潰,解決這個問題的另一個方法是
?? CoInitialize(NULL);
?? CLSID clsid;
?? CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
?? {
?? CComPtr<IGetRes> pGetRes;//智能指針
?? pGetRes.CoCreateInstance(clsid);
?? pGetRes->Hello();
?? }
?? CoUninitialize();
--------------------------------------------------------------------
以上就是COM的5中方法,當然具體怎么使用還是在于程序的環境,加以琢磨....

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品久久久久久久久| 久久一区中文字幕| 欧美日韩亚洲系列| 久久亚洲一区二区| 久久爱另类一区二区小说| 亚洲欧洲精品一区二区| 久久久亚洲影院你懂的| 午夜国产不卡在线观看视频| 亚洲人成在线观看一区二区| 狠狠综合久久av一区二区小说| 美国十次了思思久久精品导航| 欧美日韩成人一区二区| 亚洲第一黄色| 欧美大片在线观看| 欧美日韩亚洲不卡| 国产日韩成人精品| 久久成人精品| 久久国产精品网站| 国产综合香蕉五月婷在线| 久久久国产精品一区| 欧美一区二区三区精品电影| 免费毛片一区二区三区久久久| 日韩午夜精品| 久久精品国产精品亚洲| 欧美色精品天天在线观看视频| 国产精品网站在线观看| 亚洲国产乱码最新视频| 亚洲视频一区二区在线观看| 久久精品视频在线播放| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美精品一卡| 黑人巨大精品欧美一区二区 | 影音先锋在线一区| 午夜伦理片一区| 在线综合+亚洲+欧美中文字幕| 欧美1级日本1级| 亚洲精品视频在线| 亚洲精品乱码| 国产精品v欧美精品∨日韩| 黄色成人在线免费| 亚洲国内欧美| 亚洲大胆人体视频| 亚洲日本中文字幕免费在线不卡| 久久久久久伊人| 亚洲国产一区二区三区a毛片| 欧美日韩在线大尺度| 欧美韩日视频| 久久一综合视频| 欧美成人日韩| 亚洲国产专区| 亚洲另类在线视频| 久久国产乱子精品免费女| 久久久久久久欧美精品| 久久综合九色综合久99| 欧美日韩1区2区| 一区二区电影免费观看| 国产欧美精品日韩精品| 久久久噜噜噜久久中文字免| 久久伊伊香蕉| 午夜精品久久久久久久99水蜜桃 | 在线观看欧美日韩国产| 久久激情五月激情| 欧美xx视频| 亚洲一区二区精品在线| 久久精品91久久香蕉加勒比 | 亚洲国产一区二区三区a毛片| 欧美激情视频免费观看| 亚洲欧美综合| 久久综合九色综合久99| 亚洲一区二区三区乱码aⅴ| 99精品国产在热久久下载| 亚洲动漫精品| 亚洲一区免费| 亚洲欧美日韩国产一区| 欧美福利精品| 欧美激情中文字幕在线| 在线观看日产精品| 久久亚洲欧美| 欧美电影资源| 亚洲精品欧美极品| 欧美全黄视频| 亚洲免费影院| 性做久久久久久久久| 国产精品日韩一区| 午夜精品久久久久久久久久久久久| 中文日韩欧美| 国产伦精品一区二区三区| 亚洲一区不卡| 国产麻豆日韩欧美久久| 亚洲在线不卡| 欧美一区二区日韩一区二区| 亚洲主播在线观看| 久久免费黄色| 亚洲精品日韩激情在线电影| 欧美高清不卡在线| 国产精品99久久久久久白浆小说| 亚洲少妇最新在线视频| 免播放器亚洲一区| 亚洲视频一二三| 久久久www成人免费毛片麻豆| 在线观看国产欧美| 欧美国产日韩二区| 在线视频日韩| 亚洲第一主播视频| 亚洲欧美日韩精品久久奇米色影视| 国产人成精品一区二区三| 欧美 日韩 国产在线| 久久久精品日韩| 亚洲欧美在线aaa| 一本高清dvd不卡在线观看| 免费日韩精品中文字幕视频在线| 亚洲你懂的在线视频| 亚洲人成高清| 亚洲三级视频在线观看| 亚洲国产美国国产综合一区二区| 欧美日韩国产综合新一区| 麻豆国产精品va在线观看不卡| 中文在线资源观看视频网站免费不卡| 欧美风情在线| 亚洲第一色在线| 欧美国产在线观看| 亚洲黄色av| 99国产一区| 欧美一区二区三区电影在线观看| 欧美亚洲自偷自偷| 久久午夜电影网| 欧美成人一区二区三区| 国产精品爱啪在线线免费观看| 欧美成人四级电影| 亚洲欧洲在线播放| 一区二区三区四区五区在线| 99国产精品| 亚洲一区二区精品视频| 亚洲高清av| 亚洲综合成人婷婷小说| 欧美午夜不卡视频| 久久久久久久久久久久久9999| 亚洲国产精品欧美一二99| 久久精品一二三区| 亚洲女人天堂av| 国内精品99| 欧美大片一区二区三区| 久久综合网hezyo| 亚洲欧洲一二三| 亚洲三级毛片| 欧美日韩大片| 国产精品亚洲片夜色在线| 中文欧美在线视频| 亚洲麻豆视频| 国产精品国产三级国产普通话三级 | 亚洲精选在线观看| 欧美成人综合| 欧美激情网站在线观看| 亚洲三级国产| 欧美激情1区2区3区| 欧美国产日韩一二三区| 在线观看成人av| 亚洲电影视频在线| 欧美日韩一区二区三区免费看 | 欧美国产一区二区三区激情无套| 国产精品丝袜xxxxxxx| 欧美综合第一页| 久久中文字幕一区| 亚洲一区二区三区视频| 亚洲一区二区3| 国产三级欧美三级日产三级99| 免费成人av| 小黄鸭精品密入口导航| 久久久美女艺术照精彩视频福利播放 | 欧美日韩无遮挡| 在线一区二区三区四区| 9l视频自拍蝌蚪9l视频成人| 国产精品视频大全| 久久久久一区| 国产精品久久久久久久午夜| 免费欧美网站| 国产精品免费看| 最近看过的日韩成人| 亚洲国产欧美国产综合一区| 亚洲午夜视频| 午夜亚洲福利在线老司机| 欧美日韩美女在线观看| 免费影视亚洲| 国产揄拍国内精品对白 | 韩日成人在线| 亚洲韩国青草视频| 一区二区在线视频播放| 欧美在线1区| 一本大道av伊人久久综合| 欧美精品一区二区三区蜜臀| 欧美成年网站| 中国女人久久久| 国产私拍一区| 欧美激情精品久久久久久| 亚洲综合999| 亚洲日本免费| 欧美肥婆bbw| 欧美承认网站| 亚洲无毛电影| 国产一区二区三区视频在线观看 |