为什么 Unity 不能识别这个 DLL - 它是在错误的地方吗?

Why won't Unity recognize this DLL - is it in the wrong place?

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

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

此 DLL 是项目中的几个 DLL 之一,但它是唯一一个抛出错误的 DLL。起初我认为这可能是一个错误的 DLL,所以我按照必须生成新的一些说明进行操作,但那些生成的 dll 也不起作用。之前的 Dev 使用 CMake 为工作版本创建 dll。我已经尝试使用 cMake 和 Visual Studio 来生成 dll,但仍然出现相同的异常。

然后我认为它可能与用于生成C# 界面的.net Framework 版本有关,但是之前的开发人员包含的调试调用显示加载了c# 界面(称为Iface)。我还使用 .Net Framework 3.5 通过 visual studio(社区 2019)重新生成了 dll,但我仍然得到相同的结果:DLLNotFoundException

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

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

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

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

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

我找到了一个 GitHub thread suggesting a tool called Dependency Walker 来检查依赖关系,但那给了我一长串东西。

我试着四处寻找 Dependency Walker 报告的内容并找到 that suggested an updated (i.e., post-Win7) tool called Dependecies

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