【问题标题】:Why won't Unity recognize this DLL - is it in the wrong place?为什么 Unity 不能识别这个 DLL - 是不是放错地方了?
【发布时间】:2020-12-08 16:39:00
【问题描述】:

我继承了一个几乎没有文档的项目。基本上它是一个 Unity 项目,它接收来自正在运行的 Linux 程序的模拟心率信息,以进行显示。

我获得了在平板电脑上运行的 Unity 应用程序的工作版本。但是当我从存储库中打开项目并尝试运行它时,我得到了一个 DllNotFoundException。我仍在试图弄清楚整个项目是如何设置的,但据我了解,该 DLL 是为了将 C++ 转换为 C# 以供 Unity 使用,因此源文件夹也包含一个 C# 接口类作为 .cpp 和 .h 文件。

这个 DLL 是项目中的几个之一,但它是唯一一个引发错误的。起初我认为这可能是一个糟糕的 DLL,所以我按照我必须生成的几个指令来生成新的,而那些生成的 dll 也不起作用。以前的 Dev 使用 CMake 为工作版本创建 dll。我尝试使用 cMake 和 Visual Studio 来生成 dll,但仍然得到相同的异常。

然后我认为它可能与用于生成 C# 接口的 .net Framework 版本有关,但是之前的 dev 包含的调试调用显示 C# 接口(称为 Iface)已加载。我还使用 .Net framework 3.5 通过 Visual Studio (community 2019) 重新生成了 dll,但我仍然得到相同的结果:DLLNotFoundException

我还尝试更改 Unity 构建设置以针对之前开发人员所说的不同平台,PC、Android 和通用 Windows。无论针对哪个平台,我都会得到相同的 DLLNotFoundException。

我不确定这是否相关,但我发现如果我在 Unity 中的“插件加载设置”下检查“启动时加载”,我会收到错误“插件无法加载......因为一个或更多依赖项无法加载。”我一直试图弄清楚哪些依赖项没有被加载。

我在前一个开发人员指示的文件夹中有插件,在 Assets>HeartRateEngine>Plugins 中,然后该插件文件夹具有 Native 和 Managed 文件夹,引发异常的文件夹位于 Native 文件夹中。我认为 DLL 的位置可能是问题的一部分?

我将尝试重新克隆整个项目,并再次重新生成所有 dll,但我希望得到任何帮助。如有必要,我可以使用代码进行更新,但我目前认为代码不是问题,因为以前的开发人员能够让它工作,而且我可以访问历史记录。如果我有任何进展,我会尽快更新。如果这是一个写得不好的问题,我很抱歉,我只是变得绝望。非常感谢您阅读这一切! :)

【问题讨论】:

  • "插件无法加载...因为它的一个或多个依赖项无法加载。"可能意味着 Unity 正在查找您添加的 dll,但缺少该 dll 想要的其他内容。 (见stackoverflow.com/a/7378982/342842
  • 谢谢!我觉得这是问题所在,但我没有其他文档。我怎样才能进一步调试它以确定究竟缺少什么?
  • 我刚刚阅读了链接 - 我有一些事情要尝试,然后我会更新。谢谢身临其境!
  • @NCarlson - 有更新吗?
  • @Chuck 不幸的是,这个项目的截止日期很短,所以我现在选择基本上废弃 dll 并完全编写自己的解决方法。将来我想尝试使用具有不同版本依赖项的不同 PC 重建 dll,看看我是否能让 Unity 识别它。

标签: c# c++ unity3d dll cmake


【解决方案1】:

啊啊啊终于解决问题了!我的 DLL 需要的依赖项不存在。出于某种原因,Unity 只是报告了DllNotFoundException: <dllName.dll>,而不是给出依赖错误或类似的东西。

我发现了一个 GitHub thread 建议使用名为 Dependency Walker 的工具来检查依赖项,但这给了我一长串东西。

我尝试四处查看 Dependency Walker 报告的内容,发现 this answer 建议使用名为 Dependecies 的更新(即 Win7 后)工具。

当指向 Unity“找不到”的 DLL 时,该工具显示了我的新计算机上没有的另一个常见 DLL(对于我的公司)。试图在源计算机上找到 DLL 并意识到它是与公司软件一起安装的,该 DLL 旨在与... big facepalm 进行交互。安装了软件,Dependencies 找到了我的 Unity 依赖的 DLL,然后 Unity “找到” DLL 并运行没有问题。

【讨论】:

  • 在此期间我遇到了一个简短的问题,即 DLL 对于我安装的程序版本实际上并不正确 - “DLL Hell”。依赖关系使我看起来好像缺少一些 VC Redistributables 或其他东西,即使这些都已安装。一旦我安装了适当版本与 DLL 一起使用的软件,一切正常。
猜你喜欢
  • 1970-01-01
  • 2014-01-02
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
相关资源
最近更新 更多