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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

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

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


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

2.在工程中導入組件或類型庫
 #import "組件所在目錄myCom.dll" no_namespace

   #import "類型庫所在目錄myCom.tlb"
   
using namespace MYCOM;


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

方法二:
   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();

方法三:
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();

方法四:
直接從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);

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

posted on 2009-04-17 15:08 楊粼波 閱讀(3795) 評論(2)  編輯 收藏 引用

評論

# re: vc中調用Com組件的方法詳解 2009-04-18 10:43 99書城

愿和貴站博客交換鏈接
鏈接做好了 審核一下哦~~
博客名稱: 99書城
博客地址: http://www.xd920.cn/  回復  更多評論   

# re: vc中調用Com組件的方法詳解[未登錄] 2009-07-17 14:35 Jans2002

總結的很好啊  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲永久精品国产| 久久精品99国产精品酒店日本| 久久久人成影片一区二区三区| 理论片一区二区在线| 亚洲成色精品| 欧美成人黑人xx视频免费观看| 亚洲福利电影| 中国av一区| 欧美在线一区二区三区| 欧美成人免费视频| 国产精品久99| 亚洲国产欧美一区| 亚洲自拍电影| 欧美va亚洲va国产综合| 99精品99久久久久久宅男| 欧美一区二区私人影院日本 | 亚洲看片网站| 欧美一区二区成人| 欧美好吊妞视频| 国产老女人精品毛片久久| 亚洲国产精品www| 性久久久久久久久久久久| 欧美黄免费看| 欧美一区二区黄色| 欧美日韩精品免费观看| 国产一级久久| 亚洲影视综合| 亚洲国产精品久久久久秋霞蜜臀 | 中文精品99久久国产香蕉| 久久国产精品99精品国产| 欧美视频免费在线| 最新日韩在线| 欧美大片免费久久精品三p| 亚洲一二三四区| 欧美欧美全黄| 亚洲精品裸体| 欧美成人资源| 久久久精品国产免费观看同学| 国产精品香蕉在线观看| 亚洲天堂免费在线观看视频| 欧美国产视频日韩| 久久久久久久综合色一本| 国产日韩欧美三区| 欧美在线999| 亚洲特级毛片| 欧美午夜片在线观看| 99riav国产精品| 亚洲激情六月丁香| 欧美激情一区二区三区| 亚洲福利视频一区| 日韩午夜在线观看视频| 美腿丝袜亚洲色图| 久久久久成人精品免费播放动漫| 国产欧美精品一区二区色综合| 亚洲欧美大片| 亚洲欧美日本日韩| 国产精品一区=区| 校园春色国产精品| 西西人体一区二区| 国产日韩精品一区二区三区| 亚洲欧美日韩视频一区| 一区二区三区视频免费在线观看| 欧美日韩一区在线| 亚洲男人影院| 午夜一区二区三区不卡视频| 国产日韩精品久久久| 久久激情视频免费观看| 欧美中文在线视频| 亚洲大胆av| 亚洲每日在线| 国产精品看片你懂得| 香蕉久久一区二区不卡无毒影院| 亚洲欧美综合v| 在线观看国产日韩| 亚洲国产精品精华液2区45| 欧美日韩国产成人在线| 亚洲欧美日韩成人高清在线一区| 亚洲欧美日韩爽爽影院| 怡红院精品视频| 亚洲精品欧洲精品| 国产夜色精品一区二区av| 欧美激情中文字幕一区二区 | 国产精品久久久久久影视| 久久精品亚洲一区| 欧美激情免费观看| 欧美一区二区三区视频在线观看| 久久久国产成人精品| 一本久道久久综合中文字幕| 亚洲欧美影音先锋| 亚洲美女中文字幕| 欧美在线网站| 亚洲性视频网址| 久久久青草婷婷精品综合日韩 | 欧美黄污视频| 国产精品久久久久久久久久三级| 久久午夜av| 国产精品免费观看在线| 亚洲第一久久影院| 国产日韩精品视频一区二区三区| 亚洲成人在线网| 国产午夜久久久久| 日韩视频在线观看国产| 在线观看视频免费一区二区三区| 99xxxx成人网| 亚洲卡通欧美制服中文| 欧美在线视频播放| 午夜久久电影网| 欧美日韩国产影院| 欧美jjzz| 国外视频精品毛片| 国产精品久久久久久久免费软件| 欧美精品高清视频| 浪潮色综合久久天堂| 欧美性猛交一区二区三区精品| 久久中文欧美| 国产色综合网| 宅男精品视频| 一区二区不卡在线视频 午夜欧美不卡'| 久久成人羞羞网站| 亚洲影视在线| 欧美日韩一区二区在线观看| 亚洲国产专区校园欧美| 亚洲国产专区| 美女主播一区| 欧美大片在线观看| 亚洲福利在线视频| 久久人人97超碰精品888| 久久久亚洲午夜电影| 国产欧美69| 亚洲女同精品视频| 亚洲在线成人| 国产精品美女久久久免费 | 另类激情亚洲| 玖玖玖免费嫩草在线影院一区| 国产视频一区二区在线观看| 亚洲女女女同性video| 欧美中日韩免费视频| 国产日韩1区| 久久成人18免费观看| 欧美a级大片| 99精品欧美一区| 欧美体内she精视频| 亚洲一二三区视频在线观看| 久久成人久久爱| 极品尤物av久久免费看| 美女视频网站黄色亚洲| 亚洲精品一区二区三区福利| 亚洲性视频h| 国产午夜精品一区二区三区视频 | 亚洲免费高清视频| 亚洲综合色丁香婷婷六月图片| 国产精品日日做人人爱| 欧美专区第一页| 亚洲福利在线观看| 在线亚洲电影| 国产欧美亚洲视频| 久久综合色一综合色88| 91久久久久久久久久久久久| 亚洲一区二区日本| 狠狠综合久久| 欧美日韩一区二区三区在线看 | 欧美一级成年大片在线观看| 久久亚洲午夜电影| 一区二区三区产品免费精品久久75| 国产精品久久久久久久久免费樱桃 | 亚洲一区二区免费| 欧美成人蜜桃| 欧美一区二区三区四区高清| 亚洲国产精品高清久久久| 欧美丝袜一区二区| 久久久精品性| 亚洲午夜未删减在线观看| 蜜臀久久99精品久久久久久9 | 欧美黄色影院| 欧美自拍丝袜亚洲| 亚洲精品专区| 国产一区二区精品丝袜| 欧美精品一区二区三| 久久精品在线观看| 亚洲一区3d动漫同人无遮挡| 欧美激情精品久久久久久久变态 | 在线中文字幕一区| 欧美成在线视频| 欧美一区二区在线| 在线亚洲精品福利网址导航| 国产综合在线视频| 国产精品久久久久9999| 欧美精品导航| 欧美成人中文| 久久一区二区三区av| 欧美中文字幕第一页| 午夜久久资源|