• <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>
            萬(wàn)星星@豌豆莢 歡迎加入我們
            一個(gè)吃軟飯的男人!!!!!我只想寫程序####
            微博:http://weibo.com/wanlianwen
            posts - 172,  comments - 1253,  trackbacks - 0
            曾經(jīng)有一位csdn朋友問(wèn)過(guò)我這個(gè)問(wèn)題(當(dāng)時(shí)自己很自大,以為知道很多),由于孤陋寡聞沒(méi)能夠幫助解決,并且告訴他不可能實(shí)現(xiàn)。現(xiàn)在等我知道怎么實(shí)現(xiàn)了,確不知道那個(gè)朋友在那里。如果上天再給我一次機(jī)會(huì),我寧愿不回答。如果非要我給一個(gè)答案,我想該說(shuō)不知道。
            無(wú)知無(wú)畏,大放厥詞,不知道有沒(méi)有誤導(dǎo)別人,為自己行為感到慚愧,愿那個(gè)朋友已經(jīng)找到解決方法。在此給出實(shí)現(xiàn),希望對(duì)后面有需要的人有幫助。
            我開(kāi)始了解類型庫(kù)應(yīng)該說(shuō)是從.NET開(kāi)始,它里面有程序集的概念,程序集里面有類型,可以通過(guò)反射技術(shù)動(dòng)態(tài)創(chuàng)建。當(dāng)我再回頭看COM的類型庫(kù)時(shí),我完全明白了。在這一點(diǎn).NET從思想上和COM的類型庫(kù)(or OLE)完全等同。COM類型庫(kù)等同于程序集的概念,它里面也是類型,下面摘自SDK:
            typedef?/*?[v1_enum]?*/?
            enum?tagTYPEKIND
            ????
            {????TKIND_ENUM????=?0,
            ????TKIND_RECORD????
            =?TKIND_ENUM?+?1,
            ????TKIND_MODULE????
            =?TKIND_RECORD?+?1,
            ????TKIND_INTERFACE????
            =?TKIND_MODULE?+?1,
            ????TKIND_DISPATCH????
            =?TKIND_INTERFACE?+?1,
            ????TKIND_COCLASS????
            =?TKIND_DISPATCH?+?1,
            ????TKIND_ALIAS????
            =?TKIND_COCLASS?+?1,
            ????TKIND_UNION????
            =?TKIND_ALIAS?+?1,
            ????TKIND_MAX????
            =?TKIND_UNION?+?1
            ????}
            ????TYPEKIND;

            通過(guò)dll查看類型庫(kù)有很多種辦法,借助VB開(kāi)發(fā)環(huán)境,使用OLE View(VC6自帶小工具)附上一張圖:

            為什么要用編程方式獲取類型庫(kù)信息呢?自然有理由,想想VB IDE導(dǎo)入類型庫(kù)如何實(shí)現(xiàn)的?下面就介紹編程。
            //?load?a?dll?contain?typelib
            ????hr?=?LoadTypeLib(L"TgmDocument0906.dll",?&pITypeLib);
            ????
            if(SUCCEEDED(hr))
            ????
            {
            ????????
            //?get?account?of?types?and?iterate
            ????????nType?=?pITypeLib->GetTypeInfoCount();
            ????????
            for(nIt=0;?nIt<nType;?++nIt)
            ????????
            {
            ????????????
            //?get?each?type
            ????????????hr?=?pITypeLib->GetTypeInfo(nIt,?&pITypeInfo);
            ????????????
            if(SUCCEEDED(hr))
            ????????????
            {
            ????????????????
            //?what?the?type?is??see?define?of?TYPEKIND,?it?is?a?enum
            ????????????????pITypeLib->GetTypeInfoType(nIt,?&enumKind);
            ????????????????
            //?get?type?name
            ????????????????pITypeInfo->GetDocumentation(MEMBERID_NIL,?&bstrName,?NULL,?NULL,?NULL);
            ????????????????
            //?print?type?and?name
            ????????????????PrintType(enumKind,?W2A(bstrName));
            ????????????????
            //?if?dispatch,?we?print?all?the?functions(or?property?but?i?didn't?distinguish)
            ????????????????if(enumKind?==?TKIND_DISPATCH)
            ????????????????
            {
            ????????????????????PrintDispFunc(pITypeInfo);
            ????????????????}

            ????????????????SysFreeString(bstrName);
            ????????????????pITypeInfo
            ->Release();
            ????????????????pITypeInfo?
            =?NULL;
            ????????????}

            ????????}

            ????????pITypeLib
            ->Release();
            ????????pITypeLib?
            =?NULL;
            ????}
            我加載一個(gè)以前寫的com dll(當(dāng)然理論上可以是任何含有類型信息的dll或者exe),然后遍歷所有類型,獲取類型的名字并打印,如果類型是dispatch接口,打印出所有接口函數(shù)(可能是屬性,在此我沒(méi)有判斷)。下面是實(shí)驗(yàn)結(jié)果:



            示例代碼下載
            posted on 2006-09-06 22:21 萬(wàn)連文 閱讀(2225) 評(píng)論(4)  編輯 收藏 引用 所屬分類: ATL

            FeedBack:
            # re: 通過(guò)編程獲取COM dll中Type和Function
            2006-09-07 18:11 | LOGOS
            這個(gè)頁(yè)面(不知道是否包括你站點(diǎn)上其他的頁(yè)面),可以造成我瀏覽器的內(nèi)存泄漏,會(huì)把整個(gè)機(jī)器吃了.
            我用長(zhǎng)風(fēng)瀏覽器(IE內(nèi)核).....  回復(fù)  更多評(píng)論
              
            # re: 通過(guò)編程獲取COM dll中Type和Function
            2006-09-07 22:01 | 漂舟
            你瀏覽器這么歪 ?  回復(fù)  更多評(píng)論
              
            # re: 通過(guò)編程獲取COM dll中Type和Function
            2013-10-30 22:34 | 紅色代碼
            額.頂了星星  回復(fù)  更多評(píng)論
              
            # re: 通過(guò)編程獲取COM dll中Type和Function[未登錄](méi)
            2015-08-08 19:29 | 阿牛
            PrintDispFunc(pITypeInfo);

            PrintType(enumKind, W2A(bstrName));
            這兩個(gè)函數(shù)是怎么實(shí)現(xiàn)的  回復(fù)  更多評(píng)論
              
            簡(jiǎn)歷下載
            聯(lián)系我

            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            常用鏈接

            留言簿(66)

            隨筆分類

            隨筆檔案

            相冊(cè)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            亚洲美日韩Av中文字幕无码久久久妻妇 | 波多野结衣久久| 久久青青草视频| 久久发布国产伦子伦精品| 青青青国产成人久久111网站| 亚洲精品国产成人99久久| 精品久久久久久国产牛牛app| 久久久亚洲AV波多野结衣| 久久精品无码午夜福利理论片| 久久精品国产99国产精品| 亚洲人成电影网站久久| 99久久精品国产麻豆| 亚洲&#228;v永久无码精品天堂久久 | 久久久黄色大片| 久久综合九色综合97_久久久| 免费一级欧美大片久久网| 99国产欧美久久久精品蜜芽 | 狠狠色丁香婷综合久久| 亚洲精品美女久久久久99小说| 久久久久亚洲精品无码蜜桃| 久久无码人妻精品一区二区三区| 亚洲国产精品无码久久| 久久天天躁狠狠躁夜夜2020老熟妇| 欧美丰满熟妇BBB久久久| 色偷偷88欧美精品久久久| a级毛片无码兔费真人久久| 欧美精品久久久久久久自慰| 久久伊人五月丁香狠狠色| 狠狠色综合久久久久尤物| 草草久久久无码国产专区| 97精品国产91久久久久久| 久久亚洲精品中文字幕| 久久国产免费直播| 久久99热这里只有精品国产| 婷婷久久五月天| 久久人妻少妇嫩草AV蜜桃| 久久成人小视频| 一本久道久久综合狠狠躁AV| 久久亚洲国产精品五月天婷| 久久久久久久久久免免费精品| 精品久久人人做人人爽综合|