【问题标题】:Where to place an unmanaged DLL for use importing into a C# program?在哪里放置非托管 DLL 以用于导入 C# 程序?
【发布时间】:2011-03-06 08:00:13
【问题描述】:

这一定是一个非常愚蠢的问题,但我对 C# 还是很陌生。

无论如何,我有一个 DLL,我正在用这样的一行导入它:

[DllImport(@"MyCoolDll")]

我直接从供应商提供的演示应用程序中提取了这个,但它一直抱怨找不到 DLL。实际错误(来自 Visual Studio 2010)是这样的:

Unable to load DLL 'MyCoolDll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

我尝试将编译后的 DLL 放在 bin/debug 和 bin/release 文件夹中。我什至尝试将其复制到 system32,但似乎没有任何效果。

有什么想法吗?

【问题讨论】:

    标签: c# dll visual-studio-2010 dllimport


    【解决方案1】:

    对我来说,关键是查看 Visual Studio Build 控制台输出中列出的路径,以了解二进制文件的放置位置。一旦我发现,我就知道在哪里复制非托管 dll 并修复了“无法加载 DLL”错误。

    【讨论】:

      【解决方案2】:

      我知道您必须提供完整的文件名。所以

      [DllImport(@"MyCoolDll.dll")]
      

      它应该在 bin\debug 或 bin\release 文件夹中工作。

      更新

      This 是我学习如何导入非托管 dll 的地方。如果它是一个正常工作的测试应用程序,请检查它的 bin\debug 文件夹以查看与您的不同之处。可能引用了一个额外的dll?还要检查示例应用程序中的所有引用,以确保您没有遗漏任何内容。

      【讨论】:

      • 不幸的是,这没有帮助。此外,供应商提供的代码无需扩展即可工作。
      • @Tom 如果供应商的代码有效,你为什么要在堆栈溢出时询问它?教程不一定准确,可能是dll本身的问题?
      • 这不是一个教程,更像是一个测试应用程序来检查我猜的完整性。我问这个问题是因为我的逐字复制不起作用。不过感谢您的链接。
      【解决方案3】:

      据我所知,您必须提供扩展名:

      [DllImport(@"MyCoolDll.dll")]
      

      我通常将这些 dll 与程序二进制文件一起保存在本地(所以在 bin\Debug 中进行开发)

      【讨论】:

        【解决方案4】:

        您的 DLL 可能具有也需要加载的依赖项。你检查了吗?

        【讨论】:

        • 好主意。我该如何检查呢?
        • DependencyWalker 是一个非常棒的工具,它会告诉您加载给定 DLL 所需的其他模块(DLL、驱动程序等)。在这里获取:dependencywalker.com
        猜你喜欢
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        相关资源
        最近更新 更多