Abstract:本文講解如何利用c++製作dll並調用dll,用一個簡單的加法函數來作為示範,並給出圖形介面。
1. 開啟vs(我用的是vs2010),然後點擊檔案—>檔案—>建立—>項目,選擇Win32控制台應用程式。並輸入你想建立的vs工程名字和路徑(就命名為addfun)。然後點擊下一步,應用程式類型選擇DLL(D)這一項。然後點擊完成。就會出現下圖。
2.裡面有一個源檔案addfun.cpp,我們可以編輯裡面的內容了。裡面主要是我們想產生的函數。另外我們需要建立一個與addfun.cpp相對應的標頭檔addfun.h。直接右鍵到標頭檔—>添加—>建立項—>選標頭檔,命名為addfun.h。標頭檔就我們想產生的dll的函數名了。
3.現在我們開始編輯addfun.cpp檔案了。如下所示:
// abc.cpp : 定義 DLL 應用程式的匯出函數。//#include "stdafx.h"#include "addfun.h"int add(int a,int b){ return a+b;}
4.然後我們再編輯addfun.h,如下所示:
#include "stdafx.h"extern "C"{ _declspec(dllexport) int add(int a,int b); typedef int (* ApiAdd)(int,int);}
按照上面的格式我們編譯就能產生我們想要的dll的api。
通過以上4步,我們可以在工程的Debug目錄下找到addfun.dll和addfun.lib。
下面我們就開始介紹怎麼來調用一個dll。
1.建立一個c++工程,就建立一個空檔案就可以了。我們需要的就是addfun.dll和標頭檔。這個都可以拷到我們的新工程下。直接右鍵標頭檔,添加現有項把addfun.h添加過來。添加過來是這樣的:
#include "stdafx.h"extern "C"{ _declspec(dllexport) int add(int a,int b); typedef int (* ApiAdd)(int,int);}
但是現在我們需要修改它,不要再生產dll,我們需要把它改為
#include "stdafx.h"extern "C"{ int add(int a,int b); typedef int (* ApiAdd)(int,int);}
上面代碼和下面代碼區別在於少了_declspec(dllexport),這個是產生dll的,我們現在不需要了。
2.下面展示下如何在主函數中載入並調用dll:
// addtest.cpp : 定義控制台應用程式的進入點。//#include "stdafx.h"#include <Windows.h>#include "addfun.h"#include<iostream>#include<stdlib.h>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ int a=2,b=1,c=0; HINSTANCE hDllInst = LoadLibrary("addfun.dll"); ApiAdd myfun=0; myfun = (ApiAdd)GetProcAddress(hDllInst,"add");// youFuntionName 在DLL中聲明的函數名 if(myfun) { c=myfun(a,b); } FreeLibrary(hDllInst); cout<<c<<endl; system("pause"); return 0;}
這是程式這一行會有紅色波浪 HINSTANCE hDllInst = LoadLibrary(“addfun.dll”);
這樣修改:右鍵工程(addtest)—>屬性—>常規—>字元集。。
好的,現在就算把程式調用成功了。下面就是結果了:
所以製作dll也不是很難。
其他所有函數都可以這樣來做,我們只需要把我們想打包的函數在標頭檔中指明,然後想使用這些函數的時候,標頭檔包含進去並把_declspec(dllexport)刪除就可以了。然後load相應的dll就可以了。