什么是.exp文件和.lib文件,如何在我的C#项目中使用它们?

时间:2014-12-03 18:07:43

标签: c# .net dll

我想下载用于我的C#项目的lame库来转换音频。我找到了要使用here (libmp3lame)

的文件

当我下载档案时,我找到了我正在寻找的.dll,但除此之外还有另外两个档案:

  • libmp3lame.dll
  • libmp3lame.exp
  • libmp3lame.lib

我的问题:

  1. 1这些文件用于什么?除了.dll文件
  2. 之外,我如何在项目中使用它们
  3. 这些文件对我有什么好处.dll库不能?
  4. 编辑:我觉得这些文件不适用于C#。更多适用于C ++。但无论哪种方式,这些文件是什么?它们用于什么?

2 个答案:

答案 0 :(得分:3)

lib个文件和exp文件都与本机代码开发一起使用(例如C ++ / VB6 / Win32),并且在.NET世界中根本不使用。

lib个文件包含可重复使用的代码或数据的集合,或者两者都可以静态链接并与现有代码一起使用。它们与DLL文件类似,不同之处在于,当您编译程序时,DLL文件是动态链接的,而LIB文件是静态链接的。

exp个文件是导出文件。有一些类似的元数据文件告诉编译器DLL中的哪些函数已被导出,因此可以在静态链接的程序中重用。 .NET程序不需要这个,因为每个.NET DLL都有一个称为CLR Metadata部分的特殊部分。 .NET程序可以使用反射来提取此元数据信息并查看可用的方法。

答案 1 :(得分:0)

如果你考虑在.NET中使用本机DLL的方法(p / invoke),你的p / invoke声明有几个部分:

  • 函数签名(返回时间,参数类型)
  • DllImportAttribute指定找到函数的DLL及其在导出表中的键(错位名称或序号)

在C和C ++中,头文件提供第一个,导入库以.lib结尾,提供第二个。

与p / invoke的DllImportAttribute不同,在C和C ++中,调用约定与头文件中的函数签名一起存储。