or__declspec(dllexport)i" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

VC DLL方法的__declspec導入導出

系統(tǒng) 2199 0

https://msdn.microsoft.com/zh-cn/library/a90k134d.aspx

https://msdn.microsoft.com/zh-cn/library/ms235636.aspx

?

?

可以使用兩種方法將公共符號導入到應用程序中或從 DLL 導出函數(shù):

  • 生成 DLL 時使用模塊定義 (.def) 文件

  • 在主應用程序的函數(shù)定義中使用關鍵字 __declspec(dllimport) __declspec(dllexport)

模塊定義 (.def) 文件是包含一個或多個描述 DLL 各種特性的 Module 語句的文本文件。 如果不使用 __declspec(dllimport) __declspec(dllexport) 導出 DLL 函數(shù),則 DLL 需要 .def 文件。

可以使用 .def 文件 導入到應用程序中 從 DLL 導出

Visual C++ 用 __declspec(dllimport) __declspec(dllexport) 取代以前在 16 位版的 Visual C++ 中使用的 __export 關鍵字。

不使用 __declspec(dllimport) 也能正確編譯代碼,但使用它可以使編譯器生成更好的代碼。 編譯器之所以能夠生成更好的代碼,是因為它可以確定函數(shù)是否存在于 DLL 中,這使得編譯器可以生成跳過間接尋址級別的代碼,而這些代碼通常會出現(xiàn)在跨 DLL 邊界的函數(shù)調用中。 但是,必須使用 __declspec(dllimport) 才能導入 DLL 中使用的變量。

如果有正確的 .def 文件 EXPORTS 節(jié),則不需要 __declspec(dllexport) 添加 __declspec(dllexport) 是為了提供不使用 .def 文件從 .exe 或 .dll 文件導出函數(shù)的簡單方法。

Win32 可移植可執(zhí)行文件格式旨在最小化為修改導入而必須訪問的頁數(shù)。 為此,它將所有程序的所有導入地址都放在一個稱為“導入地址表”的位置。 這使得加載程序在訪問這些導入時可以只修改一兩頁。

?

?

?

?

?

Microsoft 在 Visual C++ 的 16 位編譯器版本中引入了 __export ,使編譯器得以自動生成導出名并將它們放到一個 .lib 文件中。 然后,此 .lib 文件就可以像靜態(tài) .lib 那樣用于與 DLL 鏈接。

在更新的編譯器版本中,可以使用 __declspec(dllexport) 關鍵字從 DLL 導出數(shù)據(jù)、函數(shù)、類或類成員函數(shù)。 __declspec(dllexport) 會將導出指令添加到對象文件中,因此您不需要使用 .def 文件。

當嘗試導出 C++ 修飾函數(shù)名時,這種便利最明顯。 由于對名稱修飾沒有標準規(guī)范,因此導出函數(shù)的名稱在不同的編譯器版本中可能有所變化。 如果使用 __declspec(dllexport) ,僅當解決任何命名約定更改時才必須重新編譯 DLL 和依賴 .exe 文件。

許多導出指令(如序號、NONAME 和 PRIVATE)只能在 .def 文件中創(chuàng)建,并且必須使用 .def 文件來指定這些特性。 不過,在 .def 文件的基礎上另外使用 __declspec(dllexport) 不會導致生成錯誤。

若要導出函數(shù), __declspec(dllexport) 關鍵字必須出現(xiàn)在調用約定關鍵字的左邊(如果指定了關鍵字)。 例如:

?
                  __declspec(dllexport) void __cdecl Function1(void);


                

若要導出類中的所有公共數(shù)據(jù)成員和成員函數(shù),關鍵字必須出現(xiàn)在類名的左邊,如下所示:

?
                  class __declspec(dllexport) CExampleExport : public CObject

{ ... class definition ... };


                
說明 說明

__declspec(dllexport) 不能應用于具有 __clrcall 調用約定的函數(shù)。

生成 DLL 時,通常創(chuàng)建一個包含正在導出的函數(shù)原型和/或類的頭文件,并將 __declspec(dllexport) 添加到頭文件中的聲明中。 若要提高代碼的可讀性,請為 __declspec(dllexport) 定義一個宏并對正在導出的每個符號使用該宏:

?
                  #define DllExport   __declspec( dllexport ) 


                

__declspec(dllexport) 將函數(shù)名存儲在 DLL 的導出表中。 如果希望優(yōu)化表的大小,請參見 按序號而不是按名稱從 DLL 導出函數(shù)

說明 說明

將 DLL 源代碼從 Win16 移植到 Win32 時,請用 __declspec(dllexport) 替換 __export 的每個實例。

VC DLL方法的__declspec導入導出


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人影院观看 | 91亚洲精品一区二区在线观看 | 国内精品一区二区三区最新 | 亚洲成在人线影视天堂网 | 国产成人精品亚洲77美色 | 伦理自拍 | 亚洲色中文字幕在线播放 | 亚洲最大激情网 | 亚洲成人日韩 | 欧洲成人在线观看 | 久久国产精品亚洲 | 国产不卡视频在线观看 | 欧美成人a级在线视频 | 欧美操操操操 | 欧美一级性视频 | 综合久久99久久99播放 | 日韩精品福利视频一区二区三区 | 欧美日韩乱码毛片免费观看 | 青青草国产一区二区三区 | 欧美一级爱爱视频 | 免费看特级毛片 | 免费观看呢日本天堂视频 | 美女伊人 | 国产精品资源站 | 天天夜碰日日摸日日澡 | 亚洲系列在线 | 无遮挡无遮挡91桃色在线观看 | 久久看免费视频 | 直接看毛片 | 一区二区三区免费精品视频 | 色综合欧美色综合七久久 | 欧美手机看片 | 久久精品视频9 | 114毛片免费观看网站 | 成年女人毛片免费观看中文w | 亚洲精品综合一区二区三区 | 国产高清国内精品福利 | 国产一级一级一级成人毛片 | 香蕉爱爱网 | 国产成人午夜精品影院游乐网 | 四虎影院观看视频在线观看 |