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

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
數(shù)據(jù)加載中……

vc中調(diào)用Com組件的方法詳解

轉(zhuǎn)載自:網(wǎng)絡(luò),來(lái)源未知,如有知曉者請(qǐng)告知我。


需求:
1.
創(chuàng)建myCom.dll,COM只有一個(gè)組件,兩個(gè)接口:
   IGetRes--
方法Hello(),
   IGetResEx--
方法HelloEx()

2.
在工程中導(dǎo)入組件或類(lèi)型庫(kù)

clip_image001 #import "組件所在目錄myCom.dll" no_namespace

clip_image001   #import "類(lèi)型庫(kù)所在目錄myCom.tlb"
clip_image001  
using namespace MYCOM;



方法一:

clip_image001   CoInitialize(NULL);
clip_image001   CLSID clsid;
clip_image001   CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
clip_image001   CComPtr<IGetRes> pGetRes;
//
智能指針
clip_image001
   pGetRes.CoCreateInstance(clsid);
clip_image001   pGetRes->Hello();
clip_image001   pGetRes.Release();
//小心哦!!請(qǐng)看最后的注意
clip_image001
   CoUninitialize();


方法二:

clip_image001   CoInitialize(NULL);
clip_image001   CLSID clsid;
clip_image001   HRESULT hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
clip_image001   IGetRes *ptr;
clip_image001   hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
clip_image001                 __uuidof(IGetRes),(LPVOID*)&ptr);
clip_image001   ptr->Hello();
clip_image001   CoUninitialize();


方法三:

clip_image001CoInitialize(NULL);
clip_image001   HRESULT hr;
clip_image001   CLSID clsid;
clip_image001   hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
clip_image001   IGetRes* ptr;
clip_image001   IGetResEx* ptrEx;
clip_image001  
//
使用CoCreateClassObject創(chuàng)建一個(gè)組件(特別是mutilThreads)的多個(gè)對(duì)象的
clip_image001
     時(shí)候,效率更高.
clip_image001   IClassFactory* p_classfactory;
clip_image001   hr=CoGetClassObject(clsid,CLSCTX_INPROC_SERVER,
clip_image001                       NULL,IID_IClassFactory,
clip_image001                       (LPVOID*)&p_classfactory);
clip_image001   p_classfactory->CreateInstance(NULL,__uuidof(IGetRes),
clip_image001                                          (LPVOID*)&ptr);
clip_image001   p_classfactory->CreateInstance(NULL,__uuidof(IGetResEx),
clip_image001                                          (LPVOID*)&ptrEx);
clip_image001   ptr->Hello();
clip_image001   ptrEx->HelloEx();
clip_image001   CoUninitialize();
clip_image001


方法四:
直接從dll中得到DllGetClassObject,接著生成類(lèi)對(duì)象及類(lèi)實(shí)例(這方法可以
使組件不用在注冊(cè)表里注冊(cè),這是最原始的方法,但這樣做沒(méi)什么意義,至少失去了COM
對(duì)用戶(hù)的透明性),不推薦使用.

clip_image001typedef HRESULT (__stdcall * pfnHello)(REFCLSID,REFIID,void**);
clip_image001   pfnHello fnHello= NULL;
clip_image001   HINSTANCE hdllInst = LoadLibrary("
組件所在目錄myCom.dll");
clip_image001   fnHello=(pfnHello)GetProcAddress(hdllInst,"DllGetClassObject");
clip_image001  
if (fnHello != 0)
clip_image002clip_image003  
clip_image004{
clip_image005   IClassFactory* pcf = NULL;
clip_image005   HRESULT hr=(fnHello)(CLSID_GetRes,IID_IClassFactory,(
void**)&pcf);
clip_image005  
if (SUCCEEDED(hr) && (pcf != NULL))
clip_image006clip_image007  
clip_image004{
clip_image005   IGetRes* pGetRes = NULL;
clip_image005   hr = pcf->CreateInstance(NULL, IID_IFoo, (
void**)&pGetRes);
clip_image005  
if (SUCCEEDED(hr)   && (pFoo != NULL))
clip_image006clip_image007  
clip_image004{
clip_image005   pGetRes->Hello();
clip_image005   pGetRes->Release();
clip_image008   }
clip_image005   pcf->Release();
clip_image008   }
clip_image009   }
clip_image001   FreeLibrary(hdllInst);
clip_image001


方法五:
通過(guò)ClassWizard利用類(lèi)型庫(kù)生成包裝類(lèi),不過(guò)前提是com組件的接口必須是派
生自IDispatch,具體方法:
   
調(diào)出添加類(lèi)向?qū)?span lang="EN-US">(.NET
),選擇類(lèi)型庫(kù)中MFC類(lèi),打開(kāi),選擇"文件",選擇
"myCom.dll"
"myCom.tlb",接下來(lái)會(huì)出來(lái)該myCom中的所有接口,選擇你想
生成的接口包裝類(lèi)后,向?qū)?huì)自動(dòng)生成相應(yīng)的.h文件.這樣你就可以在你的MFC
像使用普通類(lèi)那樣使用組件了.CreateDispatch("myCom.GetRes") 中的參數(shù)就是ProgID通過(guò)Clsid在注冊(cè)表中可以查詢(xún)的到)

clip_image001CoInitialize(NULL);
clip_image001   CGetRes getRest;
clip_image001  
if (getRest.CreateDispatch("myCom.GetRes") != 0)
clip_image002clip_image003  
clip_image004{
clip_image005   getRest.Hello();
clip_image005   getRest.ReleaseDispatch();
clip_image009   }
clip_image001   CoUninitialize();
clip_image001



注意:
COM中的智能指針實(shí)際上是重載了->的類(lèi),目的是為了簡(jiǎn)化引用記數(shù),幾不需要程序
員顯示的調(diào)用AddRef()Release(),但是為什么我們?cè)?span lang="EN-US">Method 1

pGetRes.Release(),
問(wèn)題在與,我們的智能指針pGetRes生命周期的結(jié)束是在
CoUninitialize()
之后,CoInitialize所開(kāi)的套間在CoUninitialize()后已經(jīng)被
關(guān)閉,pGetRes此時(shí)發(fā)生析構(gòu),導(dǎo)致了程序的崩潰,解決這個(gè)問(wèn)題的另一個(gè)方法是

clip_image001CoInitialize(NULL);
clip_image001   CLSID clsid;
clip_image001   CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
clip_image002clip_image003  
clip_image004{
clip_image005   CComPtr<IGetRes> pGetRes;
//
智能指針
clip_image005
   pGetRes.CoCreateInstance(clsid);
clip_image005   pGetRes->Hello();
clip_image009   }
clip_image001   CoUninitialize();
clip_image001


以上就是COM5中方法,當(dāng)然具體怎么使用還是在于程序的環(huán)境,加以琢磨....

 

posted on 2011-01-10 12:59 肥仔 閱讀(39617) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): COM

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品久久久久久妇女6080| 99国产精品自拍| 欧美一区二区免费观在线| 欧美激情免费在线| 久久精品道一区二区三区| 国产精品久久久久久久久久妞妞| 91久久久久久国产精品| 久久久亚洲欧洲日产国码αv | 久久亚洲春色中文字幕| 国产伦精品一区二区三区在线观看 | 午夜亚洲伦理| 欧美性淫爽ww久久久久无| 亚洲精选一区| 欧美激情精品久久久久久变态| 欧美在线一二三四区| 国产麻豆成人精品| 亚洲欧美日韩精品在线| 一本久久综合| 欧美日韩精品在线| 亚洲美女网站| 亚洲国产精品第一区二区三区| 久久久另类综合| 国产一区二区三区av电影| 久久国产欧美| 午夜欧美精品| 国产亚洲欧洲| 久久久精品tv| 午夜久久久久久| 国产人久久人人人人爽| 久久国产一二区| 欧美亚洲一区在线| 国产三区二区一区久久| 欧美在线高清| 欧美亚洲自偷自偷| 国内精品久久国产| 老牛影视一区二区三区| 久久久久久久久久久久久女国产乱| 国产欧美在线观看一区| 久久国产视频网站| 久久九九免费视频| 樱桃成人精品视频在线播放| 久久综合色8888| 久久综合电影| 亚洲精品黄色| 亚洲精选在线观看| 欧美日韩在线三级| 亚洲欧美另类久久久精品2019| 亚洲视频成人| 国产性猛交xxxx免费看久久| 久久漫画官网| 久久综合色88| 99国内精品久久| 一区二区高清在线观看| 国产九九精品视频| 久久亚洲欧洲| 欧美国产另类| 午夜精品福利一区二区三区av | 国产精品专区h在线观看| 欧美有码视频| 久久精品视频在线播放| 亚洲激情小视频| 亚洲清纯自拍| 国产精品一区二区女厕厕| 久久另类ts人妖一区二区| 美女任你摸久久| 中文精品视频一区二区在线观看| 亚洲图片欧洲图片av| 狠狠噜噜久久| 亚洲欧洲一区二区三区久久| 国产精品久久久| 久久午夜电影网| 欧美精品一区二区三区在线播放| 亚洲一二三区在线观看| 香港成人在线视频| 亚洲欧洲偷拍精品| 一区二区三区高清在线| 国产一区二区三区高清在线观看 | 永久域名在线精品| 亚洲国产日韩欧美| 国产美女精品免费电影| 欧美国产日本在线| 欧美性事在线| 蜜臀va亚洲va欧美va天堂| 欧美日韩亚洲91| 久久人人爽人人爽| 欧美日韩精品一区视频 | 亚洲神马久久| 国内精品久久久久影院色 | 看片网站欧美日韩| 欧美日韩亚洲视频一区| 久久人人爽人人爽| 欧美三级在线播放| 牛夜精品久久久久久久99黑人| 欧美日韩午夜剧场| 美女网站久久| 欧美视频网址| 欧美福利电影网| 国产欧美一区二区精品秋霞影院| 欧美激情视频一区二区三区免费 | 夜夜夜久久久| 久久大逼视频| 中文精品一区二区三区| 久久久精品一区| 亚洲欧美日韩一区二区三区在线观看 | 国产精品久久网站| 亚洲国产精品一区二区三区| 国产欧美日韩视频一区二区| 亚洲精品永久免费| 黄色成人在线观看| 亚洲一本视频| 亚洲麻豆一区| 久久久午夜视频| 欧美有码在线视频| 欧美日韩在线一区二区| 亚洲高清不卡在线观看| 国产一区二区三区在线观看免费视频 | 欧美+亚洲+精品+三区| 国产精品人人爽人人做我的可爱| 亚洲国产精品黑人久久久| 国内精品久久久久影院色 | 亚洲网址在线| 欧美成人精品一区| 免费观看欧美在线视频的网站| 国产精品有限公司| 亚洲少妇在线| 亚洲午夜影视影院在线观看| 欧美久久视频| 亚洲大黄网站| 亚洲国产乱码最新视频| 欧美一区国产一区| 欧美在线免费视屏| 国产精品久久久久永久免费观看| 亚洲精品一二区| 99精品视频免费观看视频| 欧美成人69av| 欧美高清视频www夜色资源网| 黄色国产精品| 久久九九热re6这里有精品| 久久国产精品99久久久久久老狼| 国产精品vip| 99精品国产一区二区青青牛奶| 日韩一级在线观看| 欧美搞黄网站| 亚洲高清久久久| 亚洲激情视频网| 欧美大片免费| 亚洲黄色av一区| 亚洲美女视频在线观看| 欧美精品日韩www.p站| 最近看过的日韩成人| 亚洲精品国产精品久久清纯直播| 美女国产一区| 亚洲国产视频一区二区| 日韩网站免费观看| 欧美日韩999| 99精品欧美一区| 亚洲欧美国产制服动漫| 国产精品欧美日韩一区二区| 亚洲宅男天堂在线观看无病毒| 性感少妇一区| 国产亚洲精品久久久| 久久久国产视频91| 欧美激情一区二区三区在线视频观看 | 亚洲免费人成在线视频观看| 欧美一区二区三区日韩视频| 国产日本欧美视频| 久久都是精品| 欧美大色视频| 一区二区高清视频| 国产精品国产三级国产aⅴ无密码| 亚洲一区二区三区在线看| 欧美一级视频| 国语自产偷拍精品视频偷 | 麻豆国产精品一区二区三区 | 久久久久久欧美| 1024国产精品| 欧美日韩黄视频| 亚洲自拍电影| 麻豆成人在线播放| 亚洲精品乱码久久久久久日本蜜臀| 欧美日韩精品免费观看视一区二区| 一区二区91| 久久久久久**毛片大全| 亚洲国产精品123| 欧美日韩午夜剧场| 欧美与欧洲交xxxx免费观看 | 91久久黄色| 亚洲欧美国产日韩天堂区| 国模套图日韩精品一区二区| 欧美成人蜜桃| 亚洲综合三区| 欧美激情a∨在线视频播放| 亚洲视频观看| 精品不卡视频| 欧美日韩亚洲综合| 久久国产欧美精品| 亚洲精品久久久久久久久久久久 | 久久精品视频一| 亚洲精品美女91| 久久久久久久波多野高潮日日|