建立dll教程

2022-05-07 10:51:09 字數 3363 閱讀 3885

先看我的總結:

總結:1.標頭檔案中如果想以c形式提供,要判斷,如果定義了 _cplusplus, extern "c"

2.介面宣告中,要表明介面接入點的方式, __stdcall

3.記得建立定義檔案,檔案中指明了dll對外提供了哪些介面

4.新增資源檔案,新增資源檔案的方式。資源檔案的作用

5.生成dll的時候,注意如果是release還是debug的,如果是release要配置 其 **生成方式為 多執行緒/mt。

6.生成的.lib檔案是別人呼叫開發時使用到,.dll檔案是在別人程式執行時使用到。

7.呼叫工程需要配置:

a.配置標頭檔案的目錄:c/c++->常規->附加包含目錄 ,多個用分號隔開。如果標頭檔案在本工程目錄下可以不用配置

b.配置庫檔案lib:

i.新增lib檔案:linker->input->additional dependencies 新增需要包含的lib檔名,如果有多個,使用空格隔開。

ii.新增lib的檔案路徑(所在資料夾):linker->general->additional libarry directories,將lib所在資料夾加入。

8.測試技巧:可將dll工程和呼叫工程放在同乙個解決方案下面。

在window下,學會使用visual studio 2005建立簡單的dll工程,以及對dll提供的介面進行呼叫與除錯。

開啟vs2005,並建立工程。如圖所示。

這裡選擇「win32 控制台應用程式」即可。選擇工程的位置,以及新增工程的名稱「dlltest」,然後按「確定」。

接著,出現「win32 應用程式嚮導」,按「下一步」即可。

然後,出現下面的對話方塊。

這裡應用程式型別選擇「dll」,附加選項選擇「空目錄」即可。便建立了簡單dll工程。其「解決方案」顯示框內容如下:

這裡新建立的dll工程是不包含任何檔案的。

在建立了dll工程之後,便可以進行開發。步驟如下:

首先,建立標頭檔案dlltest.h,如圖:

這一幅圖是說明了在工程中新增檔案的方式,包括新增標頭檔案和下面的原始檔、模組定義檔案和資源檔案等等。

dlltest.h標頭檔案的內容如下:

#ifndef _dlltest_h_

#define _dlltest_h_

#ifdef __cplusplus

extern "c"

#endif

#endif

請注意,上面標頭檔案**中,「#ifdef __cplusplus」語句定義了該dll工程的介面以c的形式提供。另外,介面入口點方式是__stdcall。

第二步,建立原始檔dlltest.cpp,實現介面。如圖所示:

原始檔dlltest.cpp的檔案內容如下:

#include 

#include "dlltest.h"

int __stdcall example(intvalue)

上面**只是簡單的列印傳遞過來的引數。請注意,這裡是使用printf列印的,因此在後面呼叫的例子中,控制台方式才能顯示出來。

第三步,在建立了標頭檔案和實現了介面以後,就需要建立模組定義檔案,如下圖所示。這個檔案的意義在於說明dll提供哪些介面給其它應用程式呼叫。

模組定義檔案dlltest.def的內容如下:

library  "dlltest"

exports

example

上面**只匯出example介面,即其它應用程式呼叫dlltest.dll的介面時,只有example介面可以使用。

生成的dll一般需要版本資訊或者一些說明資訊,當然也可以沒有。

首先,新增資源檔案,如圖所示:

這裡是新增版本資訊,選擇「version」即可。

預設的版本資訊如下:

如果在以後的開發中,提供給別人使用的dll有不同版本,可以通過這裡的版本號來說明。一般越後面的版本,版本號越大。

在開發完畢dll介面以後,便可以生成。

生成方式有兩種,一種是debug方式,一種是release方式。其中第一種方式可以在本機器呼叫除錯dll工程的時候可以使用。再生成給別人呼叫的時候,使用release方式生成dll。

release方式生成dll時注意,設定其「**生成」方式為「多執行緒/mt」,如下圖所示。

這種方式下別人呼叫dll就不需要另外的dll環境了。

至此,dll開發完畢,其生成的release內容如下:

其中,dlltest.lib在別人呼叫開發時,使用到。dlltest.dll在別人程式執行時,需要使用到。

上面第二節,說明了如何建立乙個簡單的dll工程,下面說明如何呼叫dll提供的介面。

建立控制台測試例子test工程,過程如下:

注意,這裡選擇的是預設的「控制台應用程式」。

把第二節生成dll的庫檔案拷貝到測試工程test下(不是其任意子目錄)。庫檔案的檔案包括:

dlltest.h、dlltest.lib和dlltest.dll。

配置標頭檔案路徑,如下:「c/c++ ->常規 ->附加包含目錄」,如果標頭檔案不在測試工程目錄下,需要配置標頭檔案路徑,這裡可以設定多個目錄,也可以設定相對路徑。由於標頭檔案在dlltest.h在工程下,該目錄可以不設定。(這裡是標頭檔案所在資料夾路徑,不是檔案)

配置庫檔案lib,如下圖所示:

「聯結器->輸入->附加依賴項」設定需要呼叫的庫檔案,這裡是dlltest.lib,如果呼叫多個,可以填寫多個lib檔名稱,用空格分開。

「聯結器->常規->附加包含目錄」設定lib所在的目錄,如下圖所示。在測試工程目錄下,可以不設定。

建立原始檔test.cpp。

程式內容如下:

#include 

#include "dlltest.h"

void main()

2.介面宣告中,要表明介面接入點的方式, __stdcall

3.記得建立定義檔案,檔案中指明了dll對外提供了哪些介面

4.新增資源檔案,新增資源檔案的方式。資源檔案的作用

5.生成dll的時候,注意如果是release還是debug的,如果是release要配置 其 **生成方式為 多執行緒/mt。

6.生成的.lib檔案是別人呼叫開發時使用到,.dll檔案是在別人程式執行時使用到。

7.呼叫工程需要配置:

a.配置標頭檔案的目錄:c/c++->常規->附加包含目錄 ,多個用分號隔開。如果標頭檔案在本工程目錄下可以不用配置

b.配置庫檔案lib:

i.新增lib檔案:linker->input->additional dependencies 新增需要包含的lib檔名,如果有多個,使用空格隔開。

ii.新增lib的檔案路徑(所在資料夾):linker->general->additional libarry directories,將lib所在資料夾加入。

8.測試技巧:可將dll工程和呼叫工程放在同乙個解決方案下面。

動態建立 DLL

serializable public sealed class proxycreateobjectclass marshalbyrefobject public override object initializelifetimeservice ilease lease ilease base.i...

如何建立DLL

動態鏈結庫 dll 是從c語言函式庫和pascal庫單元的概念發展而來的。所有的c語言標準庫函式都存放在某一函式庫中。在鏈結應用程式的過程中,鏈結器從庫檔案中拷貝程式呼叫的函式 並把這些函式 新增到可執行檔案中。這種方法同只把函式儲存在已編譯的obj檔案中相比更有利於 的重用。但隨著windows這...

建立DLL函式及其使用DLL

如果想要匯出乙個全域性函式,就用關鍵字來宣告 declspec dllexport 注意 這是vc自己特有的關鍵字,在linux下不可用。declspec dllexport int add int a,int b return a b 配置生成my.dll和my.lib檔案 在main.cpp中 ...