2014-12-03 31 views
3

我想下載用於C#項目中的lame庫來轉換音頻。我找到的文件使用here (libmp3lame)什麼是.exp文件和.lib文件,以及如何在C#項目中使用它們?

當我下載的檔案文件,我發現.dll我一直在尋找,但與他們相處,有2個人文件:

  • libmp3lame.dll
  • 了libmp3lame .EXP
  • libmp3lame.lib

我的問題:

  1. 1這些文件用於什麼?除了.dll檔案
  2. 這些文件給我的.dll庫不能提供什麼好處,我怎樣才能在我的項目中使用它們?

編輯:我有一種感覺,這些文件是不是在C#中使用。更多適用於C++。但無論哪種方式,這些文件是什麼?它們用於什麼?

+0

我相信那些是用C++編譯的。不要以爲C#甚至可以使用* exp *或* lib *文件(但從未嘗試過)。 – TyCobb 2014-12-03 18:13:13

+0

@TyCobb是的,我有一種感覺,它不會與c#工作,但仍然,這些文件用於什麼? – Krimson 2014-12-03 18:14:52

+1

http://msdn.microsoft.com/en-us/library/se8y7dcs.aspx | http://stackoverflow.com/questions/2727020/what-is-use-of-exp-and-what-is-the-difference-between-lib-and-dll – TyCobb 2014-12-03 18:18:22

回答

3

lib文件和exp文件與本地代碼開發(例如C++/VB6/Win32)一起使用,在.NET世界中完全不使用。

lib文件包含可重複使用的代碼或數據或兩者的集合,這些代碼或數據可以靜態鏈接並與現有代碼重複使用。它們與DLL文件類似,只是在編譯程序時,DLL文件動態鏈接和LIB文件被靜態鏈接的很大區別。

exp文件是導出文件。有一些類似的元數據文件告訴你的編譯器DLL中的哪些函數已經導出,因此可以在你的靜態鏈接程序中重用。 .NET程序不需要這樣做,因爲每個.NET DLL都有一個稱爲CLR元數據部分的特殊部分。 .NET程序可以使用反射來獲取這些元數據信息,並查看哪些方法可用。

+0

有時'.lib'包含實際的代碼和數據,有時它只是一個導入庫(也可以是兩者)。 – 2014-12-03 18:25:25

+0

是否有可能在'.dll'文件中捆綁'.lib'和'.exp'?我正在開發一個基於Web模板的C#程序。構建過程會生成這些額外的文件。如果我單獨使用'.dll'文件(作爲某個程序的插件),我會遇到關於編碼的錯誤,但是如果我將3個文件放在同一個目錄中,則該插件可以正常工作。那麼,是否有可能將它們合併到'.dll'文件中?謝謝。 – 2016-09-01 11:04:49

+1

@ W.M。 - 在開發過程中使用'.lib'和'.exp'文件。當你分發你的應用程序時,不應該需要它們。如果你不需要它們,那麼你可以在Visual Studio中創建一個後期構建規則,比如'del $(OutDir)\ $(ProjectName).lib'。 – Icemanind 2016-09-06 22:57:40

0

如果你想在.NET消耗原生DLL(P /調用)的方法,你的P/Invoke聲明有以下幾個部分:

  • 函數簽名(返回時,參數類型)
  • DllImportAttribute指定其中函數是發現DLL和其在出口表鍵(錯位的名稱或序號)

在C和C++,頭文件提供第一和導入庫,在.lib結束,提供了t他第二。

與p/invoke的DllImportAttribute不同,在C和C++中,調用約定與函數簽名一起存儲在頭文件中。

相關問題