<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      厚積薄發
      海納百川,有容乃大
      總結下C++中模塊(Dll)對外暴露接口的方式:

      (1)導出API函數的方式

      這種方式是Windows中調用DLL接口的最基本方式,GDI32.dll, User32.dll都是用這種方式對外暴露系統API的。
      這種方式的優點是導出函數沒有語言限制,什么語言都能調用;
      缺點是這種方式是面向過程的,外部如果要支持多實例等不是很方便,另外它要求的回調函數(callback)只能是普通C函數,C++中我們通常用類靜態成員函數,很不方便。
      當然,我們通過封裝其實也可以讓這種方式支持多實例,通過一個抽象句柄HComponent, 比如支持導出函數HComponent CreateInstance(); VOID DeleteInstance(HComponent h);然后內部的其他導出函數的第一個參數都是實例句柄,類似INT SendMessage(HComponent h, ...), 用這種方式可以模擬出面向對象的效果。
      另外如果用動態加載(LoadLibrary, GetProcAddress)的方式調用它的導出函數,即使導出函數內部實現修改了,外部程序也不用重新編譯,仍然可用。
      導出函數方式一個比較優秀的例子是GDI+的實現,整個GdiPlus.dll對外提供的都是普通導出函數,但是它卻可以方便的給面向對象的語言使用,因為一方面它用Handle的方式在DLL內部封裝了對象,另一方面它在DLL外圍又用C++類的方式封裝了頭文件直接提供給用戶, 所以C++程序可以直接以面向對象的方式調用。

      (2)導出類方式
      導出類的方式就是把整個C++類對外導出, MFC42.dll就是這種方式。
      這種方式的優點是直接面向對象。
      缺點是只能給C++用,而且最好編譯器都要一致,另外DLL一變動, 外部程序需要重新編譯, 而且外部程序可以通過頭文件看到你類的內部實現,
      所以這種方式是最不建議使用的方式。

      (3)COM方式
      COM方式實際上導出了幾個固定函數(DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer), 然后以這幾個函數為入口,調用組件內部‘實現的接口。
      COM方式綜合了上面2種方法的所有優點,沒有語言限制,面向對象,多實例,只能看到接口,動態升級等。
      當然COM因為其復雜性和對注冊表的依賴,很多時候我們在封裝模塊時不愿意嚴格按照COM標準來實現,但是我們可以按照COM思想來提供接口。
      比如我們可以讓我們模塊只提供一個導出函數CreateFactory, 然后外部可以調用該接口來創建工廠,最后通過工廠創建出各種類型的對象,這些對象實現了某些接口,外部只需要這些接口的頭文件即可調用對象的方法。
      現在越來越多的組件以這種方式對外提供接口,比如D2D對外的導出接口就是D2D1CreateFactory, 然后就可以通過該工廠來創建其他的對象,比如pD2DFactory->CreateHwndRenderTarget(...),最后可以直接調用對象實現的接口:pRenderTarget->DrawRectangle(D2D1::RectF(100.f, 100.f, 500.f, 500.f), pBlackBrush);

      當然,上面幾種DLL對外暴露接口的方式本質上沒有區別,都是利用PE文件的導出節來導出數據和函數,但是根據它們使用方式的不同,對外部模塊來說還是有很大的區別,我們的推薦次序依次是:COM方式->導出API函數方式->導出類方式。
      posted on 2012-08-29 19:04  Richard Wei  閱讀(7506)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 日韩精品国产另类专区| 又爆又大又粗又硬又黄的a片| 国产成人精品区一区二区| 亚洲中文一区二区av| 欧美性猛交xxxx免费看| 欧美激情肉欲高潮视频| 97久久精品人人做人人爽| 麻豆国产成人AV在线播放| 福利一区二区视频在线| 茶陵县| 国产一级r片内射免费视频| 婷婷六月综合缴情在线| 一区二区三区精品偷拍| 视频一区视频二区中文字幕| 久久这里精品国产99丫E6| 色窝窝免费播放视频在线| 亚洲人成亚洲人成在线观看| 西西人体www大胆高清| 国产精品疯狂输出jk草莓视频| 麻豆一区二区三区蜜桃免费| 美女裸体视频永久免费| 色成人精品免费视频| 亚洲人成在线播放网站| 翘臀少妇被扒开屁股日出水爆乳| 国产一区二区日韩经典| 国产亚洲999精品AA片在线爽| 日韩精品永久免费播放平台| 国产日韩一区二区四季| 99久久亚洲综合精品网| 亚洲精品无码久久久影院相关影片 | 天天爽夜夜爱| 亚洲天堂视频网| av无码精品一区二区乱子| 中国孕妇变态孕交xxxx| 精品日本乱一区二区三区| 吉川爱美一区二区三区视频| 免费无码肉片在线观看| 无码尹人久久相蕉无码| 国产精品免费无遮挡无码永久视频| 伊人久久精品无码麻豆一区| 国产精品无码无需播放器|