[轉]windows下VS2010中lib與dll檔案的產生與使用

來源:互聯網
上載者:User

標籤:.net   庫檔案   修改   vc++目錄   應該   fine   告訴   代碼   china   

原文地址:https://my.oschina.net/SysuHuyh5LoveHqq/blog/644622

近期在windows下開發了某個程式,需要將其產生靜態檔案(lib)以及動態庫檔案(dll),其中參考了不少文章,有的講得也不是很清楚明白,先將本人實踐過的記錄一下,供後期自己查詢,也供各位大牛點評。

一、lib檔案的產生與使用

1、lib的產生

相對來說,靜態庫檔案還是比較容易產生和使用的,在代碼上,貌似也不需要更改什麼,舉例說明:

標頭檔函式宣告形式如下:

extern bool Uninitialize();

在VS2010項目中,“建立->項目->Win32項目->靜態庫”,配置好相應的項目屬性即可。

其中大致包括(根據個人項目需要去配置,如何配置可參考網上其他文章,比較多): 

“配置屬性->常規->字元集->(選你需要的字元集)”

“VC++目錄->包含目錄”

“VC++目錄->庫目錄”

 

項目產生之後,會在項目目錄中產生相應的lib檔案,這個lib檔案就是真正的靜態庫檔案。(與dll產生中產生的lib檔案還是不同的,這在dll產生的時候需要特別注意一下)

 

2、 lib檔案使用,無需過多配置,只需要在“VC++目錄->庫目錄”引入需要的lib檔案即可

二、dll檔案的產生與使用

1、dll的產生

動態庫檔案dll的產生就沒有那麼簡單了,稍微需要修改一點源碼(相比起來,還是比較喜歡Linux下so檔案產生的方式,完全不需要更改源碼,編譯命令修改即可)

同樣舉例說明,windows下源碼例子 ,同樣對於Uniitialize函數,我們需要添加dll匯出宏定於在函式宣告處:

#ifdef __cplusplus#define EXPORT extern "C" __declspec(dllexport)#else#define EXPORT __declspec(dllexport)#endif//.h檔案函式宣告EXPORT extern bool Uninitialize();//.cpp檔案函數實現EXPORT bool Uninitialize(){}

同樣在VS2010項目屬性中,“建立->項目->Win32項目->DLL”,我們也需要設定項目屬性,這與靜態庫基本類似,依賴的lib檔案可在“連結器->輸入”中設定。

 

項目產生之後,會在項目目錄中產生相應的dll檔案以及一個lib檔案,注意,此處的lib檔案並非靜態庫檔案,而是dll檔案的相應函數匯入庫檔案。

 

2、dll的使用

dll使用有兩種方式,一個是隱式使用,一種是顯示使用,這裡我只講講我自己實驗過的隱式使用方式,因為此種方式不需要我demo程式中調用介面時更改介面的使用方式(即不需要LoadLibrary以及GetProcAddress等等),關於顯示調用dll介面的方法,大家可參考網上其他很多文章說明

// .h檔案,函式宣告還是需要匯出#ifdef __cplusplus#define EXPORT extern "C" __declspec(dllexport)#else#define EXPORT __declspec(dllexport)#endifEXPORT extern bool Uninitialize();

如上隱式使用dll時,對於介面的標頭檔,我們還是需要匯出宏定義

 

注意:設定項目屬性的時候,產生dll時產生的對應lib檔案(即dll的函數匯入庫檔案)是需要“VC++目錄->庫目錄”引入的,同時將dll檔案放在項目目錄exe對應的檔案夾下即可

 

另外的解釋:

https://segmentfault.com/q/1010000000431206

問:我現在有個DLL項目,但是僅僅產生DLL檔案,我還想要產生一個LIB檔案,應該怎麼辦呢? 就是在這個DLL項目下,同時得到DLL和LIB,不需要另外建立一個靜態連結庫工程。

答:在你的項目裡需要至少有一個export symbollinker才會為你建立.lib檔案。

你可以在你想要匯出的符號前面加上__declspec(dllexport),告訴linker你需要匯出某個符號(函數,類等等)。然後重新build項目,.lib檔案應該就會產生了。
例如這樣:

__declspec(dllexport) void hello(void) {...}

 

[轉]windows下VS2010中lib與dll檔案的產生與使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.