VC++的DLL應用

maqianmaqian發表於2011-03-10

1 用VC建立DLL動態連線庫

 

1.1 建立dll專案

clip_image002

然後選擇“一個空的dll工程”,然後點選“確定”便完成了“建立dll專案”的流程。

 

1.2 為dll專案編寫原始檔

新建兩個檔案:dllDemo.h, dllDemo.cpp

在標頭檔案”dllDemo.h”中宣告三個介面函式:

extern "C" _declspec(dllexport) int Sum(int a,int b);//加法函式
extern "C" _declspec(dllexport) int Max(int a, int b);//取較大值函式
extern "C" _declspec(dllexport) int Min(int a, int b);//取較小值函式

 

然後在“dllDemo.cpp”檔案中實現三個介面函式:

#include "dllDemo.h"
extern "C" _declspec(dllexport) int Sum(int a, int b){
	return a+b;
}
extern "C" _declspec(dllexport) int Max(int a, int b){
	if(a>=b)
		return a;
	else
		return b;
}
extern "C" _declspec(dllexport) int Min(int a, int b){
	if(a>=b)
		return b;
	else
		return a;
}

 

1.3 生成dll檔案

編譯原始檔,如果沒有出現錯誤提示,那麼,在專案檔案根目錄的Debug資料夾內會生成一個dll檔案“dllDemo.dll”。

 

2 DLL呼叫

 

2.1 用C++呼叫顯式連結

clip_image004

新建一個Win32的控制檯程式進行顯式呼叫:

1. 新建“dllConsoleEvident”的Win32控制檯程式專案

2. 新建cpp檔案“dllConsoleEvident.cpp”

3. 將在第一節中,在Debug目錄下編譯生成的“dllDemo.dll”(顯式呼叫時只需要這一個檔案就夠了)檔案複製到“dllConsoleEvident”專案下的Debug資料夾根目錄下

4. 在“dllConsoleEvident.cpp”檔案中編寫以下程式碼對dll中的函式進行顯式呼叫

 

//動態載入DLL檔案
#include <iostream.h>
#include<windows.h>
void main(void){
	typedef int(*pMax)(int a,int b);//函式指標
	typedef int(*pMin)(int a,int b);
	pMax Max=NULL;
	pMin Min=NULL;
	HINSTANCE hDLL;
	hDLL=LoadLibrary("dlldemo.dll");//載入動態連結庫dlldemo.dll檔案;
	Max=(pMax)GetProcAddress(hDLL,"Max");
	Min=(pMin)GetProcAddress(hDLL,"Min");
	if (Max)//如果取出函式成功,則執行下面的語句
	{
		int A=Max(5,8);
		cout<<"比較的結果為"<<A<<endl;
	} else {
		cout<<"比較的結果為"<<"max error"<<endl;
	}
	if (Min){
		int B=Min(5,8);
		cout<<"比較的結果為"<<B<<endl;
	} else{
		cout<<"比較的結果為"<<"min error"<<endl;
	}
	FreeLibrary(hDLL);//解除安裝MyDll.dll檔案;
}

 

 

2.2 用C++隱式連結(Win32控制檯程式)

clip_image006

新建一個Win32控制檯程式演示靜態呼叫

1. 利用嚮導新建“dllConsoleStaticDemo”的空工程

2. 將dllDemo.dll”和“dllDemo.lib檔案複製到Debug目錄下,並在專案中包含“dllDemo.lib”檔案,否則會出現dll函式找不到的連線錯誤

3. 新建“dllConsoleStaticDemo.cpp”檔案,並寫入如下程式碼:

extern "C"_declspec(dllimport) int Sum(int a,int b);
extern "C"_declspec(dllimport) int Max(int a,int b);
extern "C"_declspec(dllimport) int Min(int a,int b);
#include <iostream.h>
void main(){
	int c=Sum(4,5);
	cout<<c<<endl;
	c=Max(5,6);
	cout<<c<<endl;
	c=Min(5,6);
	cout<<c<<endl;
	cout<<"Hello,dllConsoleTest~!"<<endl;
}

 

相關文章