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)的主要内容,如果未能解决你的问题,请参考以下文章

在 FMOD 中播放和收听录音设备

在 Fmod Studio C++ 中保存 FFT 谱

Sound.readData 和 Sound.lock 之间 FMOD 的区别?

如何在 FMOD Ex 中实现 VST 插件?

fmod:如何使用 FMOD_OUTPUTTYPE_WAVWRITER_NRT?

FMOD 用完了频道,FMOD_CHANNEL_FREE 似乎不起作用