【问题标题】:What is a .exp file and .lib file, and how can I use them in my C# project?什么是 .exp 文件和 .lib 文件,如何在我的 C# 项目中使用它们?
【发布时间】:2015-02-01 10:11:12
【问题描述】:

我想下载 lame 库以在我的 C# 项目中使用以转换音频。我找到了要使用的文件here (libmp3lame)

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

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

我的问题:

  1. 1 这些文件有什么用途?除了.dll 文件之外,我如何在我的项目中使用它们
  2. 这些文件对我有什么好处,而 .dll 库不能?

编辑:我感觉这些文件不适用于 C#。 C++ 的更多内容。但无论哪种方式,这些文件是什么?它们的用途是什么?

【问题讨论】:

  • 我相信这些是为您使用 C++ 编译时准备的。不要认为 C# 甚至可以使用 explib 文件(虽然从未尝试过)。
  • @TyCobb 是的,我感觉它不适用于 c#,但是,这些文件是用来做什么的?
  • 它们适用于其他 C/C++ 项目使用 DLL。您在 C# 项目中没有使用它们。但是,C++/CLI 项目可以使用它们,这是运行本机代码的另一种 .NET 方式。

标签: c# .net dll


【解决方案1】:

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

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

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

【讨论】:

  • 有时.lib 包含实际的代码和数据,有时它只是一个导入库(也可以两者兼有)。
  • 是否可以将.lib.exp 捆绑到.dll 文件中?我正在开发一个基于网络模板的 c# 程序。构建过程会生成那些额外的文件。如果我单独使用“.dll”文件(作为某些程序的插件),我会收到有关编码的错误,但如果我将 3 个文件放在同一个目录中,插件可以正常工作。那么,是否可以将它们合并到.dll 文件中?谢谢。
  • @W.M. - 在开发过程中使用.lib.exp 文件。分发应用程序时不需要它们。如果您不需要它们,那么您可以在 Visual Studio 中创建一个构建后规则,例如del $(OutDir)\$(ProjectName).lib
【解决方案2】:

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

  • 函数签名(返回时间、参数类型)
  • DllImportAttribute 指定函数所在的 DLL 及其在导出表中的键(损坏的名称或序号)

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

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

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多