国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

VS2013生成dll及動(dòng)態(tài)調(diào)用

2019-11-08 02:27:19
字體:
供稿:網(wǎng)友

VS2013生成dll及動(dòng)態(tài)調(diào)用

標(biāo)簽(空格分隔): 學(xué)習(xí)筆記


一、VS2013生成dll文件(制造端)

1.1創(chuàng)建動(dòng)態(tài)庫的方法

創(chuàng)建動(dòng)態(tài)庫需要生成.dll和.lib兩個(gè)文件 創(chuàng)建方法: 第一步:文件->新建->項(xiàng)目->win32控制臺(tái)應(yīng)用程序 項(xiàng)目名稱:DLLGenerator 應(yīng)用程序類型:DLL 附加項(xiàng)目:空項(xiàng)目 微信截圖_20160831174710.png-37kB 第二步:在創(chuàng)建的dll工程中編寫自己需要編譯成dll的函數(shù)cpp和頭文件h

//cpp文件int Add(int a, int b){ return a + b;}int Mul(int c, int d){ return c * d;}//h文件int Add(int a, int b);int Mul(int c, int d);

第三步:建立dll源文件dllmain.cpp,用來定義應(yīng)用程序的入口點(diǎn)

// dllmain.cpp : 定義 DLL 應(yīng)用程序的入口點(diǎn)。#include <windows.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;}

第四步,建立源文件Source.def 添加->新建->visual C++ ->模塊定義文件(.def) - 在此文件第一行引號(hào)中填你的項(xiàng)目名稱即可,EXPORTS下面列出要生成的函數(shù)名稱 格式:“名稱 @序號(hào)”)

LIBRARY "DLLGenerator"EXPORTS Add @1 Mul @2

第五步:點(diǎn)擊編譯生成解決方案,顯示生成完成。此時(shí)debug目錄下就會(huì)出現(xiàn).dll文件和.lib文件 微信截圖_20160831175516.png-28kB 第六步:將.h文件.dll文件.lib文件拷貝到同一個(gè)文件夾中。之后將這個(gè)文件夾就可以發(fā)送給任何人使用你編寫的函數(shù)了。

二、VS2013動(dòng)態(tài)使用動(dòng)態(tài)鏈接文件(使用端)

2.1環(huán)境配置

和配置一般使用庫的配置方法一樣(如opencv),這里不做詳細(xì)介紹,直接貼圖; 第一步:新建工程,準(zhǔn)備調(diào)用上面生成的dll文件 微信截圖_20160831175940.png-15.4kB 第二步:配置環(huán)境時(shí),將vc++目錄的包含目錄,庫目錄分別包含上面生成的文件夾(.h,.dll,.lib) 微信截圖_20160831180041.png-42kB 第三步:連接器中加入lib文件 微信截圖_20160831180058.png-11.7kB

下面就可以自由的使用dll文件中的任何函數(shù)了。

三、VS2013靜態(tài)使用動(dòng)態(tài)鏈接文件(使用端)

由于很多時(shí)候我們沒有l(wèi)ib文件和h文件,這時(shí)候上述方法就不能使用了,但是我們可以使用以下方式。

#include<iostream>#include<Windows.h>#include<time.h>typedef int(*Dllfun)(int *, int);using namespace std;int main(){ Dllfun maopao1; HINSTANCE hdll; hdll = LoadLibrary("E://matthewCode//C&C++//DLLtest//DLLtest//Debug//dllOnlytest.dll"); if (hdll == NULL) { FreeLibrary(hdll); } maopao1 = (Dllfun)GetProcAddress(hdll, "maopao"); if (maopao1 == NULL) { FreeLibrary(hdll); } int a[10]; srand(time(0)); for (int i = 0; i<10; i++) a[i] = rand() % 50; maopao1(a, 10); for (int i = 0; i<10; i++) cout << a[i] << endl; FreeLibrary(hdll);}

四、dll文件的嵌套調(diào)用(使用端)

有時(shí)候我們調(diào)用的dll文件同時(shí)也調(diào)用了其他的dll文件,這時(shí)候我們還能順利的調(diào)用這個(gè)dll文件嗎?答案是肯定的。下面我們創(chuàng)建一個(gè)dll_1實(shí)現(xiàn)一個(gè)加法函數(shù),在dll_2中我們調(diào)用dll_1中的加法函數(shù),并產(chǎn)生一個(gè)新的乘法函數(shù)。上述兩個(gè)過程都同第一小節(jié)的步驟得到dll文件,lib文件,h文件。

//dll_1int Add(int a, int b){ return a + b;}

微信截圖_20160901102606.png-14.9kB

//dll_2#include<windows.h>#include<mySubfunction.h>int Mul(int a, int b){ int c; c = Add(a , b); return c * a;}

微信截圖_20160901102648.png-17.4kB 同樣的,我們心間一個(gè)工程3,分別調(diào)用dll_1,和dll_2的函數(shù),環(huán)境的配置在這里省略不寫(dll_1和dll_2的lib,h,dll文件都需要配置)。 工程3的代碼如下:

#include <iostream>#include "mySubfunction.h"#include "J_Subfunction.h"using namespace std;int main(){ int a = 1; int b = 2; int c; int d; c = Add(a, b); d = Mul(a, b); cout << c << endl; cout << d << endl;}

輸入1,2返回值都是3說明所有dll的調(diào)用都測(cè)試通過。 微信截圖_20160901103004.png-19.2kB


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 酉阳| 溧阳市| 明星| 高平市| 五台县| 施秉县| 金乡县| 开平市| 廊坊市| 尼玛县| 洞头县| 朝阳县| 九台市| 宁德市| 沂源县| 忻州市| 新余市| 河西区| 鲁甸县| 乡宁县| 民勤县| 兴义市| 内黄县| 屯门区| 济源市| 江城| 丰顺县| 湘西| 吉木萨尔县| 祥云县| 碌曲县| 鄢陵县| 叶城县| 农安县| 响水县| 辛集市| 叶城县| 梅河口市| 梨树县| 东至县| 冷水江市|