FMOD C# Wrapper 无法找到 fmod.dll(来自 Monogame 3.8)
Posted
技术标签:
【中文标题】FMOD C# Wrapper 无法找到 fmod.dll(来自 Monogame 3.8)【英文标题】:FMOD C# Wrapper unable to find fmod.dll (from Monogame 3.8) 【发布时间】:2021-12-30 23:14:36 【问题描述】:我正在尝试使用 dll 和 C# 包装器(似乎是从 C++ 自动生成的)将 FMOD Core 2.02 带入我的 Monogame 3.8 项目。我已将 .dll 设置为复制到构建时的输出目录,并且我正在像这样访问它们:
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string path);
public void OnSystemLoad()
if (Environment.Is64BitProcess)
LoadLibrary(System.IO.Path.GetFullPath("FMOD\\x64\\fmod.dll"));
else
LoadLibrary(System.IO.Path.GetFullPath("FMOD\\x86\\fmod.dll"));
到目前为止一切正常,.dll 可以从指针访问。但是,一旦我使用以下方法创建新的 FMOD 系统:
FMOD.Factory.System_Create(out FMODSystem);
我在弹出窗口中收到此错误:
程序入口点 ?setFadePointRamp@ChannelControl@FMOD@@QEAA?AW4FMOD_RESULT@@_KM@Z 无法在动态链接库 ...fmod.dll 中找到。
在自动生成的 C# 代码本身上出现此错误:
System.DllNotFoundException: '无法加载 DLL 'fmod' 或其依赖项之一:找不到指定的模块。 (0x8007007E)'
我确信 .dll 被发现很好,因为如果我故意将路径弄乱到不正确的地方,那么第一个错误永远不会出现。
有人在 2021 年成功将 FMOD 与 Monogame 集成了吗?如果是这样,请告知,希望获得有关启动和运行此功能的任何指导...不要被 Monogame 的 MediaPlayer 卡住!
我在这个主题上找到的其他资源(到目前为止没有一个对我有用): https://mysteriousspace.com/2015/05/31/fmod-in-c-its-a-pain-to-set-up-heres-how-i-did-it/ https://github.com/Martenfur/ChaiFoxes.FMODAudio
【问题讨论】:
附加信息:System_Create 是 100% 在 LoadLibrary 之后被调用的,所以这不是问题。我也很肯定我没有错过任何 fmod.dll 的依赖项,看看 ChaiFoxes 的示例,我已经掌握了一切——尽管因为它崩溃了,但无法通过 Dependency Walker 确认。 【参考方案1】:设法通过恢复到 FMOD 的旧版本 2.01 来解决这个问题。
我会写一张票让 FMOD 团队知道,但我的希望并不高,因为他们似乎不太关心 Unity 之外的 C#。
【讨论】:
请不要将此标记为解决方案,这只是一种解决方法。请将问题留待实际解决方案。 别担心,我不打算将其标记为解决方案。我宁愿不要被旧版本的 FMOD 卡住。 我同意,API 已更改。我只是不想让你作为一个新的贡献者感到被忽视并放弃,因为你找到了解决方案。以上是关于FMOD C# Wrapper 无法找到 fmod.dll(来自 Monogame 3.8)的主要内容,如果未能解决你的问题,请参考以下文章
Sound.readData 和 Sound.lock 之间 FMOD 的区别?