回覆列表
  • 1 # 使用者9244303842090

    1 建立VS動態連結庫

    工具:VS2015(版本差異過大可能操作有所不同)

    語言:C語言(這點要注意,因為VS對C語言要求較高,可能Keil能編譯的語法,在VS中不行),若是C++可以用C語言的動態連結庫,需要宣告 extern "C" 。

    前提:動態連結庫中需要被外部呼叫的函式放在一個頭檔案中宣告比較方便。

    1.1 建立工程

    1.選擇WIN32控制檯應用程式

    2.下一步之後選擇DLL

    3.在標頭檔案夾和原始檔加入與建立原始檔相關的檔案,包括之前說的包含介面的檔案(我們這裡稱為dell_interface.h、dell_interface.c)和與這兩個檔案相關的標頭檔案

    4. 在dell_interface.h中宣告的需要呼叫的函式之前加上 __declspec(dllexport),如果有多個函式最好每個函式都加上,(PS:雖然網上有說法不加也可以建立外部連結庫,但我實驗的不可以)

    進行編譯(右鍵工程build,不是debug),如果編譯器報錯(認為.c與.h函式不是同一個),就去把.c檔案中的對應的函式也加上__declspec(dllexport)。

    編譯成功:

    編譯成功,進入debug資料夾 即可看到生成的dll與lib檔案(dll動態庫檔案 lib動態庫的描述檔案) PS:若沒有__declspec(dllexport)可能生成不了lib檔案

    2 加入需要呼叫動態庫的工程

    有原工程:放入與工程檔案相同的目錄(與.exe相同目錄)

    3.設定尋找lib檔案地址

    (1)右鍵工程,選擇屬性,連結器(linker)->輸入(Input)->附加依賴性,把生成的lib名字貼上,應用

    (2)右鍵工程,選擇屬性,連結器(linker)->一般(General)->Additional Library Directories,把lib檔案的地址輸入,確定。

    4.重要:如果dll中存在需要在外部被使用的結構體、聯合體等型別,分為兩種情況:

    (1)結構體、聯合體中不存在函式:在呼叫dll的工程檔案中的公共標頭檔案中重新定義結構體、聯合體即可。

    (2)結構體、聯合體中存在函式:此種需要透過函式引數的方式將結構體、聯合體利用指標傳遞。

    5.編譯執行,工程可以成功呼叫動態連結庫中的函式。

  • 中秋節和大豐收的關聯?
  • 榮耀9X馬上要釋出了,據說AI跑分全球第一,這款手機值得購買嗎?