DLL動(dòng)態(tài)鏈接庫導(dǎo)出函數(shù)方法 -- 動(dòng)態(tài)導(dǎo)出(.def文件導(dǎo)出)

簡介

動(dòng)態(tài)鏈接庫最大的優(yōu)勢在于可以提供給其他應(yīng)用程序共享的資源赶掖,最小化應(yīng)用程序代碼的復(fù)雜度竿裂,其中一個(gè)十分重要的功能就是dll可以導(dǎo)出封裝函數(shù)的功能许帐。導(dǎo)出函數(shù)有兩種主要方式,分別是靜態(tài)導(dǎo)入動(dòng)態(tài)導(dǎo)入莹妒,本文主要介紹動(dòng)態(tài)導(dǎo)入功能名船。

方法解析

(1)創(chuàng)建DLL動(dòng)態(tài)鏈接庫項(xiàng)目


創(chuàng)建DLL動(dòng)態(tài)鏈接庫項(xiàng)目

(2)在DllMain函數(shù)的上方或下方創(chuàng)建一個(gè)自定義函數(shù)(樣例使用ShowMessageBox函數(shù))

// dllmain.cpp : 定義 DLL 應(yīng)用程序的入口點(diǎn)。
#include "stdafx.h"

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

int ShowMessageBox(const WCHAR* lpText, const WCHAR* lpCaption)
{
    MessageBox(NULL, lpText, lpCaption, 0);
    return 0;
}

(3)創(chuàng)建.def文本文件

創(chuàng)建.def文本文件

Text.def文件代碼如下:

LIBRARY DemoDLL
EXPORTS
    ShowMessageBox

(4)如果是VS平臺(tái)旨怠,必須要在連接器中添加.def文件


路徑:項(xiàng)目屬性 => 鏈接器 => 輸入 => 模塊定義文件 => 輸入.def文件的文件名

(5)編譯生成dll和lib文件


編譯生成的文件圖例

(6)編寫測試程序

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <Windows.h>

using namespace std;

typedef int(*ShowMessageBox)(const WCHAR* lpText, const WCHAR* lpCaption);   //聲明函數(shù)指針渠驼,告訴程序從動(dòng)態(tài)鏈接庫導(dǎo)入的地址是什么類型的函數(shù)

int main(void)
{
    HMODULE hm = LoadLibrary("DemoDLL.dll");            //加載動(dòng)態(tài)鏈接庫
    if (hm == NULL)
    {
        printf("Library Error !\n");
        system("pause");
        return 0;
    }
    ShowMessageBox SMessageBox = (ShowMessageBox)GetProcAddress(hm, "ShowMessageBox");   //查找函數(shù)地址
    if (SMessageBox == NULL)
    {
        cout << GetLastError() << endl;
        printf("GetProcAddress error \n");
        system("pause");
        return 0;
    }
    SMessageBox(L"HelloWorld", L"Tip");         //使用dll中導(dǎo)出的函數(shù)
    FreeLibrary(hm);
    return 0;
}

(7)執(zhí)行成功


程序運(yùn)行畫面
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鉴腻,隨后出現(xiàn)的幾起案子迷扇,更是在濱河造成了極大的恐慌,老刑警劉巖爽哎,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜓席,死亡現(xiàn)場離奇詭異,居然都是意外死亡课锌,警方通過查閱死者的電腦和手機(jī)厨内,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渺贤,“玉大人雏胃,你說我怎么就攤上這事≈景埃” “怎么了瞭亮?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長固棚。 經(jīng)常有香客問我统翩,道長仙蚜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任厂汗,我火速辦了婚禮委粉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘面徽。我一直安慰自己艳丛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布趟紊。 她就那樣靜靜地躺著,像睡著了一般碰酝。 火紅的嫁衣襯著肌膚如雪霎匈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天送爸,我揣著相機(jī)與錄音铛嘱,去河邊找鬼。 笑死袭厂,一個(gè)胖子當(dāng)著我的面吹牛墨吓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纹磺,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帖烘,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了橄杨?” 一聲冷哼從身側(cè)響起秘症,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎式矫,沒想到半個(gè)月后乡摹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡采转,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年聪廉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片故慈。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡板熊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惯悠,到底是詐尸還是另有隱情邻邮,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布克婶,位于F島的核電站筒严,受9級(jí)特大地震影響丹泉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸭蛙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一摹恨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娶视,春花似錦晒哄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孝赫,卻和暖如春较木,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背青柄。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工伐债, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人致开。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓峰锁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親双戳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虹蒋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,813評(píng)論 0 27
  • 動(dòng)態(tài)調(diào)用動(dòng)態(tài)庫方法c/c++linuxwindows 關(guān)于動(dòng)態(tài)調(diào)用動(dòng)態(tài)庫方法說明 一拣技、 動(dòng)態(tài)庫概述 1千诬、 動(dòng)態(tài)庫的...
    KINGZ1993閱讀 13,914評(píng)論 0 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)膏斤,斷路器徐绑,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 合作與交流 國際交流處 看中文的 跳到海外學(xué)習(xí) 本科生 教務(wù)處 申報(bào)表學(xué)分轉(zhuǎn)換 國際交流處 想向外面推薦 學(xué)分 ...
    sunmin1209luv閱讀 219評(píng)論 0 0
  • 專欄 作者葛曉傲茄,國稅新人,自由寫手沮榜,兼職模特盘榨。 從8月1日開始上班,不知不覺已有一個(gè)月的時(shí)間蟆融,可以說我已經(jīng)適應(yīng)了現(xiàn)...
    葛曉gxiao閱讀 1,793評(píng)論 2 28