【问题标题】:Using dll at runtime in Unity在 Unity 中运行时使用 dll
【发布时间】:2017-03-06 06:05:52
【问题描述】:

我想通过代码在运行时使用我的 dll。(不要将 dll 放在插件资产中) 所以我在下面写了这段代码:

Assembly dll = Assembly.LoadFrom("D:\HaoranZhu\workspace\UnityProjects\ViveDRMSDKTest\Assets\Plugins\x86_64\vita_api.dll");

但它在 Unity 控制台中显示错误:

BadImageFormatException:无法加载文件或程序集 'D:\HaoranZhu\workspace\UnityProjects\ViveDRMSDKTest\Assets\Plugins\x86_64\vita_api.dll' 或其依赖项之一。试图加载格式不正确的程序。 System.Reflection.Assembly.LoadFrom (System.String assemblyFile) (在 /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/Assembly.cs:520) loadExternalDll.Start () (在 Assets/TestScripts/loadExternalDll.cs:16)

这里有什么问题?

【问题讨论】:

  • 您确定 vita_api.dll 对其他程序集没有任何依赖关系吗?你试过用 32 位代替吗?
  • 您是否尝试过先将其加载到插件中以确保其正常工作?

标签: c# unity3d dll mono


【解决方案1】:

您收到此错误是因为(根据https://msdn.microsoft.com/en-us/library/1009fa28(v=vs.110).aspx):

----BadImageFormatException----
assemblyFile 不是有效的程序集;例如,64 位进程中的 32 位程序集。有关详细信息,请参阅异常主题。
-或-
当前已加载 2.0 版或更高版本的公共语言运行库,并且 assemblyFile 是使用更高版本编译的。

---

这意味着当进程为 64 位时,您正在使用 32 位程序集(只需获取 64 位版本)。

或者,如果您为更高版本的公共语言运行时下载了库。

【讨论】:

  • 是的,我在微软的网站上看到过。一个非常奇怪的问题是,当我使用“使用命名空间”将 dll 放入 Assets/Plugins 和 C# 脚本中时,它工作得很好。但是,如果我通过脚本“Assembly dll = Assembly.LoadFrom(XXX)”使用它,它就会出现错误。我不知道为什么。
  • 好吧,它们基本上是您可以从中获得此错误的唯一方法。该方法是否适用于任何其他 DLL 文件?
猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
相关资源
最近更新 更多