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

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

vc中調用Com組件的方法詳解

轉載自:網絡,來源未知,如有知曉者請告知我。


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

2.
在工程中導入組件或類型庫

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

clip_image001   #import "類型庫所在目錄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();
//小心哦!!請看最后的注意
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創建一個組件(特別是mutilThreads)的多個對象的
clip_image001
     時候,效率更高.
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,接著生成類對象及類實例(這方法可以
使組件不用在注冊表里注冊,這是最原始的方法,但這樣做沒什么意義,至少失去了COM
對用戶的透明性),不推薦使用.

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


方法五:
通過ClassWizard利用類型庫生成包裝類,不過前提是com組件的接口必須是派
生自IDispatch,具體方法:
   
調出添加類向導(.NET),選擇類型庫中MFC類,打開,選擇"文件",選擇
"myCom.dll"
"myCom.tlb",接下來會出來該myCom中的所有接口,選擇你想
生成的接口包裝類后,向導會自動生成相應的.h文件.這樣你就可以在你的MFC
像使用普通類那樣使用組件了.CreateDispatch("myCom.GetRes") 中的參數就是ProgID通過Clsid在注冊表中可以查詢的到)

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中的智能指針實際上是重載了->的類,目的是為了簡化引用記數,幾不需要程序
員顯示的調用AddRef()Release(),但是為什么我們在Method 1
pGetRes.Release(),
問題在與,我們的智能指針pGetRes生命周期的結束是在
CoUninitialize()
之后,CoInitialize所開的套間在CoUninitialize()后已經被
關閉,pGetRes此時發生析構,導致了程序的崩潰,解決這個問題的另一個方法是

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中方法,當然具體怎么使用還是在于程序的環境,加以琢磨....

 

posted on 2011-01-10 12:59 肥仔 閱讀(39608) 評論(0)  編輯 收藏 引用 所屬分類: 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>
            亚洲国产一区二区在线| 久久综合九色综合欧美狠狠| 国模精品一区二区三区| 在线视频日韩| 亚洲级视频在线观看免费1级| 午夜精品久久久久久久99水蜜桃| 欧美精品一区二区视频| 国内精品国产成人| 久久成人国产| 欧美在线亚洲在线| 国产一级揄自揄精品视频| 久久精品免费观看| 中文网丁香综合网| 欧美日韩情趣电影| 亚洲视频欧洲视频| 日韩一二在线观看| 欧美丝袜一区二区| 亚洲视屏一区| 中文精品视频| 国产精品日韩精品| 欧美在线1区| 新片速递亚洲合集欧美合集| 国产婷婷色一区二区三区在线| 欧美在线一区二区三区| 香蕉成人久久| 永久555www成人免费| 毛片av中文字幕一区二区| 久久综合色综合88| 亚洲美女少妇无套啪啪呻吟| 亚洲精品乱码久久久久久蜜桃91| 欧美女主播在线| 亚洲伊人观看| 久久激情网站| 亚洲精品你懂的| 亚洲裸体视频| 国产女主播一区二区| 久久精品99国产精品| 久久久亚洲人| 一区二区三区www| 午夜精品短视频| 亚洲国产91色在线| 99精品视频免费全部在线| 国产精品视频免费| 免费在线播放第一区高清av| 欧美日本国产| 久久男人资源视频| 欧美激情中文不卡| 欧美一区国产一区| 免费在线观看一区二区| 亚洲一区二区三区四区中文| 欧美一级淫片aaaaaaa视频| 在线不卡a资源高清| 日韩一二三在线视频播| 狠狠色丁香久久综合频道| 欧美亚洲网站| 亚洲毛片视频| 亚洲一区二区三区乱码aⅴ| 国产一区二区三区免费观看| 欧美 日韩 国产 一区| 欧美日韩三级一区二区| 久久精品国产91精品亚洲| 欧美精品一线| 卡通动漫国产精品| 欧美日韩一区三区四区| 久久视频这里只有精品| 欧美体内谢she精2性欧美| 久久综合色影院| 国产精品久久久久久福利一牛影视 | 欧美黄色片免费观看| 欧美破处大片在线视频| 老司机午夜免费精品视频| 国产精品视频九色porn| 亚洲国产精品黑人久久久| 国产欧美日韩不卡免费| 亚洲国产欧美久久| 国产综合香蕉五月婷在线| 一区二区三区精密机械公司| 亚洲精品一区二区三区在线观看| 亚洲欧美日韩国产综合在线| 99国产精品国产精品毛片| 久久久噜噜噜久久| 欧美专区福利在线| 国产精品成av人在线视午夜片| 亚洲福利国产| 1000部精品久久久久久久久 | 国产精品www994| 亚洲国产精品成人| 国内自拍一区| 欧美与欧洲交xxxx免费观看| 亚洲一区二区三区在线看| 欧美日韩免费一区| 亚洲精品自在在线观看| 99视频精品全国免费| 欧美日韩国产不卡| 中日韩午夜理伦电影免费| 性欧美超级视频| 国产日本欧美视频| 久久经典综合| 欧美成人午夜激情在线| 亚洲人成小说网站色在线| 免费一级欧美片在线播放| 欧美成人免费在线| 91久久精品美女高潮| 欧美jjzz| 99国产一区二区三精品乱码| 亚洲无线一线二线三线区别av| 欧美日韩一区在线观看| 亚洲小说区图片区| 久久精品亚洲精品| 影院欧美亚洲| 欧美日韩亚洲91| 亚洲一区二区三区四区五区午夜| 午夜欧美不卡精品aaaaa| 国产午夜精品理论片a级大结局| 午夜精品视频在线观看| 久久久福利视频| 亚洲高清三级视频| 欧美成人性生活| 一区二区三区日韩在线观看| 性欧美1819sex性高清| 国产精品中文字幕欧美| 久久久久成人精品| 亚洲欧洲综合另类| 欧美亚洲一区二区在线| 狠狠色伊人亚洲综合成人| 快播亚洲色图| 一本色道**综合亚洲精品蜜桃冫| 欧美一级一区| 亚洲国产另类精品专区| 欧美日本一区二区高清播放视频| 亚洲视频一区二区| 久久综合综合久久综合| 亚洲无限av看| 亚洲国产另类久久精品| 国产精品视频一| 免费亚洲一区二区| 亚洲综合国产| 亚洲国产成人在线| 久久久久久久尹人综合网亚洲| 亚洲综合视频网| 国产精品自拍三区| 欧美成人蜜桃| 欧美一区二区三区久久精品茉莉花| 欧美激情一区二区三区全黄 | 亚洲精品久久在线| 国产精品色午夜在线观看| 两个人的视频www国产精品| 亚洲深夜福利在线| 亚洲国产一区二区精品专区| 久久都是精品| 亚洲性图久久| 亚洲精品九九| 在线观看国产精品淫| 国产精品尤物福利片在线观看| 欧美大色视频| 久久精品视频99| 午夜精品免费视频| 亚洲视频精选在线| 亚洲视频一起| 亚洲午夜av电影| 亚洲美女福利视频网站| 亚洲大胆美女视频| 欧美成人久久| 免费欧美在线| 另类欧美日韩国产在线| 久久久久看片| 亚洲日本一区二区三区| 一区二区三区在线看| 狠狠色狠色综合曰曰| 国产亚洲欧美一区二区三区| 国产精品日本一区二区| 国产精品国产三级国产aⅴ9色| 欧美高清hd18日本| 免费不卡视频| 免费高清在线一区| 久久先锋资源| 久久精品国产亚洲高清剧情介绍| 99精品国产高清一区二区| 亚洲人成在线观看| 亚洲人成在线影院| 亚洲区国产区| 日韩亚洲综合在线| 一本色道久久综合狠狠躁篇怎么玩 | 一区二区欧美在线观看| 91久久久亚洲精品| 国产精品免费福利| 欧美网站大全在线观看| 欧美日韩一区国产| 国产精品成人一区二区网站软件 | 欧美精品色一区二区三区| 老司机午夜免费精品视频| 欧美/亚洲一区| 欧美国产精品日韩| 欧美日韩高清不卡| 欧美性色视频在线| 国产日本欧美一区二区三区在线| 国内成人精品2018免费看| 在线日韩av片| 亚洲六月丁香色婷婷综合久久| 一区二区三区你懂的|