日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编写DLL所学所思(2)——导出类

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写DLL所学所思(2)——导出类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2011.10.6

燭秋

一、導出類的簡單方式

這種方式是比較簡單的,同時也是不建議采用的不合適方式。

只需要在導出類加上__declspec(dllexport),就可以實現導出類。對象空間還是在使用者的模塊里,dll只提供類中的函數代碼。不足的地方是:使用者需要知道整個類的實現,包括基類、類中成員對象,也就是說所有跟導出類相關的東西,使用者都要知道。通過Dependency Walker可以看到,這時候的dll導出的是跟類相關的函數:如構造函數、賦值操作符、析構函數、其它函數,這些都是使用者可能會用到的函數。

這種導出類的方式,除了導出的東西太多、使用者對類的實現依賴太多之外,還有其它問題:必須保證使用同一種編譯器。導出類的本質是導出類里的函數,因為語法上直接導出了類,沒有對函數的調用方式、重命名進行設置,導致了產生的dll并不通用。

部分代碼(DLL頭文件):

//2011.10.6 //cswuyg //dll導出類,比較差勁的方法 #pragma once #ifdef NAIVEAPPROACH_EXPORTS #define NAIVEAPPROACH_API __declspec(dllexport) #else #define NAIVEAPPROACH_API __declspec(dllimport) #endif//基類也必須導出,否則警告: class NAIVEAPPROACH_API CBase { public:void Test(); private:int m_j; };//也必須導出 class NAIVEAPPROACH_API CDate { public:void Test2(); private:int m_k; };class NAIVEAPPROACH_API CNaiveApproach : public CBase { public:CNaiveApproach(int i = 0);// TODO: add your methods here.void Func(); private:int m_iwuyg;CDate m_dobj; };

Demo代碼見附件NaiveApproach部分。

二、導出類的較好方式

這種方式是比較合適的,跟com類似。

???????? 結構是這樣的:導出類是一個派生類,派生自一個抽象類——都是純虛函數。使用者需要知道這個抽象類的結構。DLL最少只需要提供一個用于獲取類對象指針的接口。使用者跟DLL提供者共用一個抽象類的頭文件,使用者依賴于DLL的東西很少,只需要知道抽象類的接口,以及獲取對象指針的導出函數,對象內存空間的申請是在DLL模塊中做的,釋放也在DLL模塊中完成,最后記得要調用釋放對象的函數。

???????? 這種方式比較好,通用,產生的DLL沒有特定環境限制。借助了C++類的虛函數。一般都是采用這種方式。除了對DLL導出類有好處外,采用接口跟實現分離,可以使得工程的結構更清晰,使用者只需要知道接口,而不需要知道實現。

  部分代碼:

(1)DLL頭文件:

//2011.10.6 //cswuyg //dll導出類 //dll跟其使用者共用的頭文件 #pragma once #ifdef MATUREAPPROACH_EXPORTS #define MATUREAPPROACH_API __declspec(dllexport) #else #define MATUREAPPROACH_API __declspec(dllimport) #endifclass IExport { public:virtual void Hi() = 0;virtual void Test() = 0;virtual void Release() = 0; };extern "C" MATUREAPPROACH_API IExport* _stdcall CreateExportObj(); extern "C" MATUREAPPROACH_API void _stdcall DestroyExportObj(IExport* pExport);

(2)導出類頭文件:

//2011.10.6 //cswuyg //dll導出類 // 實現類 #pragma once#include "MatureApproach.h"class ExportImpl : public IExport { public:virtual void Hi();virtual void Test();virtual void Release();~ExportImpl(); private: };

? ? ? ? ?Demo代碼見附件MatureApproach部分。

三、總結

導出類是比較簡單的,比較容易混淆的概念上一篇總結已經說完了。本質上來說,跟導出函數沒差別。使用VS2005自動生成的代碼可以省去很多力氣,比起以前做練習什么都是自己動手寫方便多了。要注意一下工程的設置,熟悉它們的作用可以加快編程速度。

Demo代碼附件:

http://files.cnblogs.com/cswuyg/%E7%BC%96%E5%86%99DLL%E6%89%80%E5%AD%A6%E6%89%80%E6%80%9D(2)(%E5%AF%BC%E5%87%BA%E7%B1%BB).rar

參考資料:

http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的编写DLL所学所思(2)——导出类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 杂技xxx裸体xxxx欧美 | 看片日韩| 国产xxxx做受性欧美88 | 色妇网 | www.日本免费 | 西西人体做爰大胆gogo直播 | 久久99伊人 | 日韩欧美综合视频 | 中文字幕在线观看视频网站 | 天天爽天天 | 久久伊| 亚洲一区二区自偷自拍 | 四季av日韩精品一区 | 久久影院中文字幕 | 亚洲v日本| 四虎精品欧美一区二区免费 | 在线永久看片免费的视频 | 91精品国产一区二区三区蜜臀 | 欧美影视 | 国产麻豆剧果冻传媒白晶晶 | 久久精品国产免费看久久精品 | 天堂网在线视频 | 国产夫妇交换聚会群4p | 久久伊人一区 | 欧美日韩亚洲免费 | 少妇黄色片 | 福利所导航| 日韩欧美视频免费观看 | 吃奶摸下的激烈视频 | 五月婷婷综合久久 | 特大黑人娇小亚洲女 | 国产一区视频在线播放 | 美女的胸给男人玩视频 | 日本丰满大乳奶做爰 | 精品一区二区在线观看视频 | 日韩一区二区三免费高清在线观看 | 精品一区亚洲 | 爱爱二区 | 九九视频这里只有精品 | 成人免费观看在线视频 | 国产喷水吹潮视频www | 日韩欧美在线免费 | 红桃视频在线播放 | 亚洲国产精华液网站w | 日韩成人在线免费观看 | 国产极品美女高潮无套嗷嗷叫酒店 | 天天操狠狠干 | 中文字幕网址在线 | 人妻少妇被猛烈进入中文字幕 | 成人午夜激情影院 | 亚洲色图19p| 国产精品欧美精品 | 成人做爰100 | 欧美片网站yy | 99riav1国产精品视频 | 久草天堂| 国产在线视频资源 | 成人av电影在线观看 | 国产情侣小视频 | 老汉av在线 | 97久久人国产精品婷婷 | 欧美日韩一区二区三区视频 | 黄色a站 | 精品国产一区二区三区性色 | 日韩激情小视频 | 成熟了的熟妇毛茸茸 | 免费在线观看亚洲 | 亚洲激情黄色 | 精品裸体舞一区二区三区 | 欧美精品一区二区三区在线播放 | 国产成人精品电影 | 亚洲国产精品久久精品怡红院 | 美女久久久久久久久 | 超碰公开免费 | 欧美高清精品一区二区 | 欧美黑人做爰爽爽爽 | 777片理伦片在线观看 | 日本不卡中文字幕 | 日韩人妻无码精品久久久不卡 | 国产一区二区精彩视频 | 亚洲国产一区二区三区在线观看 | 91精产国品一二三区在线观看 | 漂亮人妻被中出中文字幕 | 久久久久久香蕉 | 骚黄网站 | www.199麻豆 | 顶级嫩模啪啪呻吟不断好爽 | 亚洲一区免费视频 | 欧美一区二区三区小说 | 伊人黄| 久青草免费视频 | 美女被娇喘视频 | a无一区二区三区 | www.一区二区三区四区 | 日韩天堂视频 | 国产精品免费91 | 亚洲一区在线观看视频 | 色小说在线观看 | 亚洲精品20p |