DLL的雙向標頭檔案

2021-07-02 23:18:49 字數 1009 閱讀 8754

動態庫dll的巨集定義標頭檔案雙向使用方法小結

如果想在自己的dll檔案中使用函式修改定義巨集,又想同時在提供給客戶端的標頭檔案中讓客戶使用,有兩種方法比較方便,當然如果你直接自己定義也未為不可,但比較費事。當然,同時你得在def檔案中宣告匯出函式,防止函式改名。

(1)第一種方法:在孫鑫老師的教程的方法:

在標頭檔案中定義 :

//定義匯出巨集

#ifdef  myapi

#else

#define myapi extern "c" _declspec(dllimport)

#endif

然後在其的cpp檔案定義:

#define  myapi  extern "c" _declspec(dllexport)

#include "***.h" //注意:標頭檔案應該在cpp的巨集定義之下,否則報乙個巨集重定義的warning

因為標頭檔案不參與編譯,所以cpp檔案單獨編譯,先定義autoschedule 巨集,然後再展開包含的標頭檔案編譯,發現在巨集autoschedule已定義,就直接編譯後面的內容。

(2)第二種方法:這種方法在**中看的比較多,是比較通用的方法,因為使用者不需要在呼叫這個dll的時候,不需要自己去定義巨集,直接拿去用即可,因此這種方法多一點。

#ifdef my_exports

#define my_api __declspec(dllexport)

#else

#define my_api __declspec(dllimport)

#endif

不過提前要在「專案---屬性----cc++---預處理器對話方塊內的:預處理器定義裡自己定義乙個math_exports」這樣在dll中就是前者巨集定義,在另外人使用標頭檔案時是後者引進巨集定義。

這個東西看似小事情,可涉及到編譯的過程,標頭檔案和巨集的互相影響,dll的名稱處理,說微言大義有些過,不過很重要確實是真的。

DLL標頭檔案的格式和應用

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

Linux標頭檔案 C C 標頭檔案

linux標頭檔案 c c 標頭檔案。linux常用標頭檔案如下 posix標準定義的標頭檔案 目錄項 檔案控制 檔名匹配型別 路徑名模式匹配型別 組檔案 網路資料庫操作 口令檔案 正規表示式 tar歸檔值 終端i o 符號常量 檔案時間 字元擴充套件型別 internet定義 套接字本地介面 in...

hpp標頭檔案與h標頭檔案的區別

hpp,其實質就是將.cpp的實現 混入.h標頭檔案當中,定義與實現都包含在同一檔案,則該類的呼叫者只需要include該hpp檔案即可,無需再將cpp加入到project中進行編譯。而實現 將直接編譯到呼叫者的obj檔案中,不再生成單獨的obj,採用hpp將大幅度減少呼叫 project中的cpp...