c++中dll的編寫和呼叫
1. 什麼是dll
DLL(Dynamic Link Library)即動態連結庫,DLL檔案與EXE檔案一樣也是可執行檔案,但是DLL也被稱之為庫,因為裡面封裝了各種類啊,函式啊之類的東西,就像是一個庫一樣,儲存著很多東西,主要是用來呼叫的。一個應用程式可使用多個DLL檔案,一個DLL檔案也可能被不同的應用程式使用,這樣的DLL檔案被稱為共享DLL檔案。
當程式需要呼叫DLL所定義的功能時,需要先載入DLL檔案,然後取得函式的地址,最後進行呼叫。
呼叫方式主要分為兩種:隱式(通過lib檔案與標頭檔案) 與 顯式(只通過DLL檔案)。
DLL檔案是Windows作業系統下定義的檔案,可被多種語言呼叫。
通過DLL來呼叫功能,可實現程式碼的封裝與複用,去除功能之間的耦合,有利於模組化。降低應用難度的同時,也可以實現智慧財產權的保護。
2. dll 在vs2015怎麼編寫
1.首先建立一個空的DLL檔案,建立方法:新建——專案——Win32控制檯程式——然後取個名字——確定——下一步——選擇DLL——勾選空白專案。順利新建了專案。
2.然後我們在標頭檔案下建立一個頭檔案這裡我們是DLL1.h,輸入如下程式碼:
(二)回顧一下VC++支援的DLL:
DLL的編制與具體的程式語言及編譯器無關,動態連結庫隨處可見,VC++支援三種DLL:非MFC動態庫、MFC規則DLL和MFC擴充套件DLL。DLL匯出函式(或變數、類)可供應用程式呼叫;DLL內部函式只能在DLL程式內使用,應用程式無法呼叫它們。
(三)匯出函式的宣告方式:
1) 一種在函式宣告型別和函式名之間加上“_declspec(dllexport)”。
、定義需要用到的標頭檔案和原始檔
// header.h __declspec(dllexport) int add(int a ,int b);//add是函式名,可宣告多個 __declspec(dllexport) int sub(int a ,int b); // 如果是c++工程,則需要在函式宣告前加上extern “C” extern “C” __declspec(dllexport) int add(int a ,int b); extern “C” __declspec(dllexport) int sub(int a ,int b); // src.cpp int __declspec(dllexport) add(int a ,int b){ return a+b; } int __declspec(dllexport) sub(int a, int b){ return a-b; }
反覆嘗試終於成功了,雖然很初級,但是還是要Mark一下。文章由參考
int result = dbOper.verifyuser("Abc", "cd", "c##scott", "tiger", "orcl", "12");
連線(1)https://msdn.microsoft.com/zh-cn/library/ms235636(v=vs.120).aspx
只不過此文是在同一個工程下的不同專案之間進行dll呼叫,故仍有不同。
首先1.生成dll
生成的方式可以完全參考上面的連線。主要步驟為:1)新建專案C++/Win32控制檯應用程式,命名,注意生成的是dll專案,本測試沒有選擇到處符號複選框,跟上面連結一樣,但是在debug裡面還是會有dll生成。2)編輯.h和.cpp檔案。3)生成解決方案。這三步均按照上面的連線。4)將上述生成的debug內的dll,lib以及與dll同名的.h檔案拷到某個位置,要記得哦,我放到include資料夾。
2.呼叫dll
很多網上的介紹都很複雜,各種配置。。這裡似乎沒那麼複雜
主要步驟:1)新建專案C++/Win32控制檯應用程式,命名。
2)選擇沒有預編譯頭
3)呼叫dll內的類函式,可以參照上面連結中的cpp檔案
4)生成解決方案,現在肯定是很多錯誤,表捉急
5)將上面儲存的檔案中的.h放在你編輯的.cpp同文件夾下
6)將dll和lib檔案拷貝到debug資料夾下,與exe檔案是同一個資料夾
7)右鍵專案名字選擇屬性,->配置屬性->VC++目錄->常規-庫目錄,選擇你放置了lib的debug資料夾
8)->配置屬性->聯結器-輸入-附加依賴項-編輯加入lib的檔名(全名包含字尾)-確認
9)重新生成,執行即可
2) 另外一種採用模組定義(.def)檔案宣告,需要在庫工程中新增模組檔案,格式如下:
LIBRARY 庫工程名稱
EXPORTS 匯出函式名