程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C/C++中動態鏈接庫的創建和調用

C/C++中動態鏈接庫的創建和調用

編輯:關於C++

動態連接庫的創建步驟:

一、創建Non-MFC DLL動態鏈接庫

1、打開File —> New —> Project選項,選擇Win32 Dynamic-Link Library —>sample project

—>工程名:DllDemo

2、新建一個.h文件DllDemo.h

#ifdef DllDemo_EXPORTS

#define DllAPI __declspec(dllexport)

#else

#define DllAPI __declspec(dllimport)

extern "C" //原樣編譯

{

DllAPI int __stdcall Max(int a,int b); //__stdcall使非C/C++語言內能夠調用API

}

#endif

3、在DllDemo.cpp文件中導入DllDemo.h文件,並實現Max(int,int)函數

#include "DllDemo.h"

DllAPI int __stdcall Max(int a,int b)

{

if(a==b)

return NULL;

else if(a>b)

return a;

else

return b;

}

4、編譯程序生成動態連接庫

二、用.def文件創建動態連接庫DllDemo.dll。

1、刪除DllDemo工程中的DllDemo.h文件。

2、在DllDemo.cpp文件頭,刪除 #include DllDemo.h語句。

3、向該工程中加入一個文本文件,命名為DllDemo.def並寫入如下語句:

LIBRARY MyDll

EXPORTS

Max@1

4、編譯程序生成動態連接庫。

動態鏈接的調用步驟:

一、隱式調用

1、建立DllCnslTest工程

2、將文件DllDemo.dll、DllDemo.lib拷貝到DllCnslTest工程所在的目錄

3、在DllCnslTest.h中添加如下語句:

#define DllAPI __declspec(dllimport)

#pragma comment(lib,"DllDemo.lib") //在編輯器link時,鏈接到DllDemo.lib文件

extern "C"

{

DllAPI int __stdcall Max(int a,int b);

}

4、在DllCnslTest.cpp文件中添加如下語句:

#include "DllCnslTest.h"//或者 #include "DllDemo.h"

void main()

{

int value;

value = Max(2,9);

printf("The Max value is %d\n",value);

}

5、編譯並生成應用程序DllCnslTest.exe

二、顯式調用

1、建立DllWinTest工程

2、將文件DllDemo.dll拷貝到DllWinTest工程所在的目錄或Windows系統目錄 下。

3、用vc/bin下的Dumpbin.exe的小程序,查看DLL文件(DllDemo.dll)中的函 數結構。

4、使用類型定義關鍵字typedef,定義指向和DLL中相同的函數原型指針。

例:

typedef int(*lpMax)(int a,int b); //此語句可以放在.h文件中

5、通過LoadLibray()將DLL加載到當前的應用程序中並返回當前DLL文件的句 柄。

例:

HINSTANCE hDll; //聲明一個Dll實例文件句柄

hDll = LoadLibrary("DllDemo.dll");//導入DllDemo.dll動態連接庫

6、通過GetProcAddress()函數獲取導入到應用程序中的函數指針。

例:

lpMax Max;

Max = (lpMax)GetProcAddress(hDLL,"Max");

int value;

value = Max(2,9);

printf("The Max value is %d",value);

7、函數調用完畢後,使用FreeLibrary()卸載DLL文件。

FreeLibrary(hDll);

8、編譯並生成應用程序DllWinTest.exe

注:顯式鏈接應用程序編譯時不需要使用相應的Lib文件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved