【问题标题】:How to connect wrapper DLL to the API DLL for use in the C# project?如何将包装 DLL 连接到 API DLL 以在 C# 项目中使用?
【发布时间】:2016-05-07 20:10:57
【问题描述】:

我使用Dynamic Audio Normalizer 作为我的 WF 解决方案来规范音频文件的音量。它有两个 .dll 库,必须连接到项目才能使用。其中一个 - .NET 库连接良好,另一个 - API 根本不能用于项目。在运行时,我得到一个 FileNotFound 异常,这是详细的描述

无法加载文件或程序集“DynamicAudioNormalizerNET.dll”或其依赖项之一。

文档中也写到了

基于 Microsoft.NET 的应用程序 → 使用 DynamicAudioNormalizerNET.dll 程序集提供的 DynamicAudioNormalizerNET C++/CLI 包装类,在运行时需要 DynamicAudioNormalizerAPI.dll。

它的依赖项当然是“DynamicAudioNormalizerAPI.dll”,但它在解决方案的文件夹以及 NET.dll 中。此外,这两个库都作为文件添加到解决方案中,并且它们的“复制到输出”功能设置为“始终复制”。如何链接这两个 DLL 或让它正常运行?

【问题讨论】:

    标签: c# c++ .net dll


    【解决方案1】:

    有两个可能的原因。

    1. 第一个原因可能是DynamicAudioNormalizerAPI.dll 没有与DynamicAudioNormalizerNET.dll 放在一起。检查 Copy local 引用属性(在解决方案资源管理器中)并确保这两个 dll 放在一起。

    2. DynamicAudioNormalizerAPI.dll 可能有自己未解决的依赖关系。您可以通过使用专用工具Dependency Walker 打开.dll 轻松检查这一点。它会告诉你是否还需要一些runtime 或其他东西。

    【讨论】:

    • 第一个解释中的“一起来”是什么意思? “复制本地”功能设置为 true。 API DLL 不通过引用包含到项目中,这让我回想起:无法添加对“...\DynamicAudioNormalizerAPI.dll”的引用。请确保该文件是可访问的,并且它是一个有效的程序集或 COM 组件。 我也通过这个工具获得了 API 依赖,但是我应该怎么做呢?
    • @АртурФокс "comes together" 表示您在文件系统中看到的所有DynamicAudioNormalizerNET.dll(可能有很多副本)您必须确保或放置DynamicAudioNormalizerAPI.dll。所以在My Computer 中必须有两个.dll 一起DynamicAudioNormalizerNET.dllDynamicAudioNormalizerAPI.dll。将下载链接(和您的 .net 版本)放在 Question 中,我将自己测试。
    • Dependency Walker 显示缺少PTHREADVC2.DLL。另外不要忘记您的程序仅变成了 x64(因为 DynamicAudioNormalizerAPI.dll 为 x64 平台编译)。
    • 谢谢,我已经解决了所有问题。
    【解决方案2】:

    它的依赖当然是“DynamicAudioNormalizerAPI.dll”,但它也在解决方案的文件夹中

    它需要在您的项目输出目录中(例如 bin\debugbin\release,您的 .exe 所在的位置),而不是解决方案文件夹。

    【讨论】:

    • 是的,因为我已经将它添加到项目中,然后设置了“复制到发布和调试文件夹”功能。
    • 您应该在问题中包含该信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多