2020-09-06 隱式調(diào)用 顯式調(diào)用

摘自https://blog.csdn.net/qq_37059136/article/details/80167388

dll 的 生成方式 .def模式

c++動態(tài)函數(shù)庫的創(chuàng)建與調(diào)用(.def)

痕憶丶2018-05-02 16:11:28

8215收藏? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 9? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

分類專欄:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 靜態(tài)庫和動態(tài)庫? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

版權(quán)


動態(tài)庫的創(chuàng)建有兩種方法,之前說過了不使用.def的方法,現(xiàn)在說一下使用.def的方法

環(huán)境VS2005

寫個簡單的動態(tài)庫,里面有兩個函數(shù),能實現(xiàn)加法減法

首先創(chuàng)建一個空項目dll,創(chuàng)建頭文件

,再創(chuàng)建源文件

,再創(chuàng)建模塊定義文件即.def文件

這樣創(chuàng)建一個動態(tài)庫所需的條件就滿足了.

在頭文件

中寫入如下代碼

在源文件

中寫入如下代碼

在源文件的模塊定義文件

中寫入如下代碼

F7生成動態(tài)庫

在.def中第一行是數(shù)據(jù)庫的名字,第二行是固定語句EXPORTS,導(dǎo)出代碼,下面add跟sub后面可以不加@X(這里就有兩種方法導(dǎo)出動態(tài)庫里的函數(shù),后面會說)

隱式調(diào)用

在同一解決方案下創(chuàng)建空WIN32控制臺項目,在源文件中創(chuàng)建

,其代碼如下

運行結(jié)果

這樣隱式調(diào)用就完成了

注意:隱式調(diào)用需要用到動態(tài)庫里的頭文件

和動態(tài)庫文件夾debug里的

,所以.cpp文件夾中一定要包含,可以拷貝兩者到.cpp同一文件夾下,也可以用代碼中的方法.

顯式調(diào)用

在同一解決方案下創(chuàng)建WIN32控制臺空項目,在源文件中創(chuàng)建

,代碼如下

運行結(jié)果

在顯式調(diào)用中,由于使用的是.def的方法,在獲取動態(tài)庫中函數(shù)地址時有兩種方法

AddFunc ADD1 = (AddFunc)GetProcAddress(hdll,(char*)(1));這是在.def文件中add后面加@1的使用方法,當然你也可以使用通用獲取地址方法?AddFunc ADD1 = (AddFunc)GetProcAddress(hdll,"add");

AddFunc ADD1 = (AddFunc)GetProcAddress(hdll,(char*)(1));這句(char*)(1)中1是add后面@的數(shù)字,相當于add在動態(tài)庫中的地址,GetProcAddress的函數(shù)原型里1這個位置數(shù)據(jù)類型是char*類型.

附.def的一些小知識:

.def 文件中的第一條 LIBRARY 語句不是必須的仙逻,但LIBRARY 語句后面的 DLL 的名稱必須正確,即與生成的動態(tài)鏈接庫的名稱必須匹配。此語句將 .def 文件標識為屬于 DLL刃跛。鏈接器將此名稱放到 DLL 的導(dǎo)入庫中挪捕。

EXPORTS 語句列出名稱叛甫,可能的話還會列出 DLL 導(dǎo)出函數(shù)的序號值筹吐。通過在函數(shù)名的后面加上 @ 符和一個數(shù)字痘儡,給函數(shù)分配序號值刊咳。當指定序號值時彪见,序號值的范圍必須是從 1 到 N,其中 N 是 DLL 導(dǎo)出函數(shù)的個數(shù)娱挨。

LIBRARY BTREE

EXPORTS

Insert @1

Delete @2

Member @3

Min @4

“def???文件中的注釋由每個注釋行開始處的分號???(;)???指定余指。注釋不能與語句共享一行,但可以在多行語句的規(guī)范間出現(xiàn)让蕾。



vs2010中使用.def文件導(dǎo)出函數(shù)時需要的設(shè)置?

在vs2010中使用.def文件導(dǎo)出函數(shù)時,要在工程屬性-鏈接器-輸入-模塊定義文件中加入自定義的.def文件名浪规;可用vs的命令提示查看導(dǎo)出函數(shù) dumpbin -exports dllnames

//dll.h

#pragma once

int __stdcall add(int x,int y);

int __stdcall sub(int x,int y);


// no need .def

//extern "C" _declspec(dllexport) int add(int a, int b);

//extern "C" _declspec(dllexport) int sub(int a, int b);


//main.cpp

#include "dll.h"

int _stdcall add(int x,int y)

{

return x+ y;

}

int _stdcall sub(int x,int y)

{

return x - y;

}

//int? add(int x,int y)

//{

//return x+ y;

//}

//

//int? sub(int x,int y)

//{

//return x - y;

//}



所以隱式調(diào)用的意思是,在調(diào)用的useDLL的源代碼中探孝,可以看到用到的只是LIB和.H,


實際上笋婿,運行的時候還是需要用.DLL.


顯式調(diào)用就很明顯說需要dll, 里面沒有對LIB的依賴。

LoadLibrary("ConsoleApplication_GenDLL.dll");


我之前都是顿颅。缸濒。。 沒有隱式顯式的概念粱腻。

編譯的時候lib, #include ... 在設(shè)置中寫 dll. 源代碼中沒有l(wèi)oadlibrary 這樣庇配。這個可能是c和c++的差別。maybe.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绍些,一起剝皮案震驚了整個濱河市捞慌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柬批,老刑警劉巖啸澡,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異氮帐,居然都是意外死亡嗅虏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門上沐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皮服,“玉大人,你說我怎么就攤上這事×涔悖” “怎么了硫眯?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長择同。 經(jīng)常有香客問我舟铜,道長,這世上最難降的妖魔是什么奠衔? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮塘娶,結(jié)果婚禮上归斤,老公的妹妹穿的比我還像新娘。我一直安慰自己刁岸,他們只是感情好脏里,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虹曙,像睡著了一般迫横。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酝碳,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天矾踱,我揣著相機與錄音,去河邊找鬼疏哗。 笑死呛讲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的返奉。 我是一名探鬼主播贝搁,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芽偏!你這毒婦竟也來了雷逆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤污尉,失蹤者是張志新(化名)和其女友劉穎膀哲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體十厢,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡等太,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛮放。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缩抡。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞻想,到底是詐尸還是另有隱情压真,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布蘑险,位于F島的核電站滴肿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏佃迄。R本人自食惡果不足惜泼差,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呵俏。 院中可真熱鬧堆缘,春花似錦、人聲如沸普碎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麻车。三九已至缀皱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間动猬,已是汗流浹背啤斗。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赁咙,地道東北人争占。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像序目,于是被迫代替她去往敵國和親臂痕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355