1. 程式人生 > >VC中dll的lib檔案和dll有什麼不同?

VC中dll的lib檔案和dll有什麼不同?

dll是在你的程式執行的時候才連線的檔案,因此它是一種比較小的可執行檔案格式,.dll還有其他的檔案格式如.ocx等,所有的.dll檔案都是可執行。

.lib是在你的程式編譯連線的時候就連線的檔案,因此你必須告知編譯器連線的lib檔案在那裡。一般來說,與動態連線檔案相對比,lib檔案也被稱為是靜態連線庫。當你把程式碼編譯成這幾種格式的檔案時,在以後他們就不可能再被更改。

如果你想使用lib檔案,就必須:
1 包含一個對應的標頭檔案告知編譯器lib檔案裡面的具體內容
2 設定lib檔案允許編譯器去查詢已經編譯好的二進位制程式碼

如果你想從你的程式碼分離一個dll檔案出來代替靜態連線庫,仍然需要一個lib檔案。這個lib檔案將被連線到程式告訴作業系統在執行的時候你想用到什麼dll檔案,一般情況下,lib檔案裡有相應的dll檔案的名字和一個指明dll輸出函式入口的順序表。如果不想用lib檔案或者是沒有lib檔案,可以用WIN32 API函式LoadLibrary、GetProcAddress。事實上,我們可以在Visual C++ IDE中以二進位制形式開啟lib檔案,大多情況下會看到ASCII碼格式的C++函式或一些過載操作的函式名字。

一般我們最主要的關於lib檔案的麻煩就是出現unresolved symble 這類錯誤,這就是lib檔案連線錯誤或者沒有包含.c、.cpp檔案到工程裡,關鍵是如果在C++工程裡用了C語言寫的lib檔案,就必需要這樣包含:
extern "C"
{
#include "myheader.h"
}
這是因為C語言寫的lib檔案沒有C++所必須的名字破壞,C函式不能被過載,因此聯結器會出錯。

相關推薦

VCdll的lib檔案dll什麼不同

dll是在你的程式執行的時候才連線的檔案,因此它是一種比較小的可執行檔案格式,.dll還有其他的檔案格式如.ocx等,所有的.dll檔案都是可執行。 .lib是在你的程式編譯連線的時候就連線的檔案,因此你必須告知編譯器連線的lib檔案在那裡。一般來說,與動態連線檔案相對

VC++開啟檔案儲存檔案對話方塊的呼叫

The size of the OPENFILENAME structure. This value is dependent on the operating system version, so MFC can determine the appropriate kind of dialog to cre

VC++檔案的寫入讀取

VC++中對檔案的寫入和讀取 本文介紹兩種方法對檔案進行讀取和寫入操作:1、採用fstream類;2、採用CStdioFile類。 CStdioFile繼承自CFile,一個CStdioFile物件代表一個用執行時函式fopen 開啟的C 執行時流式檔案。 C++中

python的listarray的不同之處 及轉換

索引查找 tex style best col 移除 b- 索引 nump python中的list和array的不同之處list是列表,可以通過索引查找數值,但是不能對整個列表進行數值運算In [96]: b=[1,2]In [97]: b[1]Out[97]: 2In

[X264] MinGW編譯x264,VC調用libx264.dll-------------<參考轉>

-1 bin文件 source color turn 9.4 make int lease 1. 下載並按照MinGW,最好就缺省按照 http://sourceforge.net/projects/ ... ler/mingw-get-inst/ 把C:\Mi

Android查缺補漏(View篇)--布局文件的“@+id”“@id”什麽區別?

新增 布局 parent 直接 使用 margin 移除 控件 Coding Android布局文件中的“@+id”和“@id”有什麽區別? +id表示為控件指定一個id(新增一個id),如: <cn.codingblock.view.customer_view.

java的notifynotifyAll什麽區別?

lock 鎖競爭 article 隨機 html 就會 成功 external notifyall 先說兩個概念:鎖池和等待池 鎖池:假設線程A已經擁有了某個對象(註意:不是類)的鎖,而其它的線程想要調用這個對象的某個synchronized方法(或者synchroni

html的bodyhead什麽區別??

語法 XML lns TP ble 都是 IV 文件的 w3c 我的html文件如下: <html> <title>這是我的測試</title> <head> my test </head> <body>

React Native 為IOSAndroid設定不同的Style樣式,一套程式碼解決雙端顯示

React Native 開發中,大多數的元件都是IOS和Android通用的,包括大量的功能性程式碼,至少有80%以上的程式碼可以複用,而剩下的一些元件樣式/少量的程式碼會需要區分雙端,但是為了這少量的程式碼把IOS和Android完全區分這明顯不合適,程式碼複用性下降,程式碼維護量上升

java的URLConnectionHttpURLConnection什麼區別(因為我自己搜到別人寫的區別看下來都沒有什麼區別)

  今天看了一下公司同事的程式碼,如下 1 URLConnection connection = openConnection(localURL); 2 HttpURLConnection httpURLConnection = (HttpURLConnection)c

馬雲:AI應該翻譯為機器智慧,機器不同的智慧邏輯

9月17日,“2018世界人工智慧大會”在上海召開。會上,阿里巴巴董事局主席馬雲“金句”不斷,但整體而言,他認為,人工智慧將定義人們未來的生活方式,會帶來社會變革,但人們不需要擔憂人工智慧,而應該擁抱人工智慧,迎接新技術帶來的挑戰。 “未來資料將會是生產資料,計

java的notifynotifyAll什麼區別?(轉)

博主在研究執行緒面試題的時候遇到了這個問題,在網上找到一篇部落格,講的還不錯,現在分享給大家: 先說兩個概念:鎖池和等待池 鎖池:假設執行緒A已經擁有了某個物件(注意:不是類)的鎖,而其它的執行緒想要呼叫這個物件的某個synchronized方法(或者synchronized塊),由於

EBSodf檔案xdf檔案解釋

原地址:https://blog.csdn.net/cymm_liu/article/details/47947991 1、ODF odf(Object Descriptor File),裡邊含有資料庫物件的描述,用於建立資料庫表,檢視,索引等等。 除了打patch可以打odf檔案,我們

Python檔案目錄的操作

用到的核心模組有:os   shutil 檔案的建立:f = open("檔名", "w")  注:如果涉及到亂碼問題需要在後面加上encoding="utf-8" 檔案內容的讀取:f = open("檔名", "r") 檔案的重新命名:os.rename("之前的

Linux運維之系統檔案目錄的遠端傳輸

一、使用scp進行檔案或目錄的遠端傳輸 scp                  缺點:速度慢  1.檔案的傳輸     (1)scp  file  [email protected]:/dir      以上傳的方式進行復制檔案(dir為絕對路徑,file也為絕

WPF專案.xaml檔案.xaml.cs檔案無法收縮顯示的解決辦法

在VisualStudio的WPF專案中,通常同名的.xaml和.xaml.cs檔案是能夠收縮顯示的,但是在某些情況下,會出現.xaml和.xaml.cs並列顯示,無法進行收縮. 如下圖,綠色部分為正常的顯示情況;紅色部分為不正常顯示情況. 解決辦法是修改.csproj檔案

JavaScript物件的函式方法什麼區別(非常重要!!!)

在JavaScript中,物件是由建構函式生成的,且函式本身有屬性和方法,所以為了區分函式的方法和物件的方法,才有了函式和方法兩個概念,在其他很多語言中,函式就等於方法,而JavaScript完全不一樣! 例子: function Person() { } var arry=

python 的[:-1][::-1]什麼區別?

1、案例解釋 a='python' b=a[::-1] print(b) #nohtyp c=a[::-2] print(c) #nhy #從後往前數的話,最後一個位置為-1 d=a[:-1]  #從位置0到位置-1之前的數 print(d)  #pytho e=a[:-2] &

linux檔案資料夾的新建、查詢、刪除

新建資料夾 使用的mkdir命令可以新建資料夾。 mkdir filename 這樣就建立了一個叫做filename資料夾。 新建一個檔案 新建的檔案可以包括任何副檔名,.txt/.cpp/.csv 使用的是vi命令。 vi a.txt 這

C#讀取檔案寫入檔案的類

  最近編寫了一個簡單的讀取txt檔案和寫入txt檔案的一個最簡單的類,在這裡分享給大家,如果大家有什麼建議或意見可以在下面評論裡面寫上,廢話不多說,程式碼如下: ///<summary>         ///讀取txt檔案裡面的資訊         ///&