1. 程式人生 > >Eclipse for C/C++ (三)編寫DLL檔案之def檔案的使用

Eclipse for C/C++ (三)編寫DLL檔案之def檔案的使用

一、def檔案說明
通常我們編寫動態連結庫時,一般使用的都是vc或vs等相關的整合開發環境。在編寫的過程中,當使用__stdcall 標準方式呼叫時,有一個問題是經常遇到的,那就是匯出的函式名的問題。 在vc或vs相關整合開發環境下,有許多相關的文件,說明了解決問題的方法,這裡不再贅述。由於工作的原因,需要在Eclipse for C/C++上編寫相應的動態庫檔案。經過兩天的摸索嘗試,找到一種解決匯出函式名問題的方法。
由於習慣性的認識,原以為.def檔案是VC++或VS中特有的檔案格式,剛開始並沒有想到使用.def檔案。嘗試了各種組合方式,始終無法解決extern “C” 和 __stdcall之間呼叫約定的衝突。
無意間想到,.def檔案是VC++編譯連結時用到。可以嘗試新增一個.def檔案,在Eclipse編譯連結時,連結到相應.def檔案。嘗試中發現.def檔案影響到編譯的結果。說明.def檔案還是可以在Eclipse建立的共享庫工程中使用的。
通過對比結果,和除錯時提示的問題原因,嘗試了幾種組合方式,找到了下面的解決方式:
例如:

1、只有一個.cpp原始檔時,使用extern “C”放在宣告的匯出函式的前面。
這裡寫圖片描述
2、在.h標頭檔案中,有如上兩種方式來宣告匯出函式。
在.cpp原始檔中,不再需要新增extern “C”來限制函式的實現。
這裡寫圖片描述
這裡寫圖片描述

二、 此外,下面介紹def檔案的使用方法和注意事項。

1、在專案dllTest工程中新增.def檔案,新增方法,和新增.h檔案、.cpp檔案方式一樣。但這裡要注意: 右擊–>“新建”–>“檔案”,填寫專案名稱。
這裡寫圖片描述
2、編寫def檔案格式和內容,如下圖所示:
(可以使用分號“;”來添加註釋說明,可以使用LIBRARY來指明動態連結庫內部名稱—可以不指定)
這裡寫圖片描述

三、def檔案的使用
1 、如前面所述:def在程式連結的時候被使用。步驟如下:
“專案”–>“屬性 ”–>“C/C++構建”–>“設定”–>“工具設定”
這裡寫圖片描述
2、 在“設定”對話方塊中,選擇“MinGW C++連結器”中的“雜項”,在右面下邊的對話方塊中“點選”“其他物件”後面的第一個圖示
這裡寫圖片描述
“新增…”
3、彈出下面的對話方塊,點選“工作空間…”按鈕,選擇檔案目錄中的def檔案
這裡寫圖片描述
4、工作空間中的def檔案,點選“確定”。
這裡寫圖片描述
5、彈出下面的對話方塊,點選“確定”。
這裡寫圖片描述
6、在MinGW C++連結器,“雜項”對應的對話方塊中出現了def對應的目錄,如下圖所示。點選“確定”,完成設定。
這裡寫圖片描述

四、修改生成檔案的名稱(字首和字尾)
在預設情況下,大部分的整合開發環境,生成的dll檔案的名稱和工程名相同,以dll為字尾。
在Eclipse for C/C++中,預設情況下,生成的dll檔案的名稱有一個“lib”字首加工程名稱和“dll”字尾。下面介紹更改生成檔名稱的方法。

1、“專案”–>“屬性”–>“C/C++構建”–>“設定”–>“構建工作”。
這裡寫圖片描述

2、修改方式:
工件型別:共享庫(根據你建立的工程型別而定)。
工件名稱:${ProjName}(預設工程名稱),可自定義。
工件擴充套件:dll
輸出字首:lib(沒有字首,刪除lib,此框為空)
根據專案的要求,自行更改,例如下圖所示:
這裡寫圖片描述