操作系统:Windows 8.1 64
我尝试使用DirectX在VB.Net中播放多个声音,我的代码中没有错误。 问题是每当事件被触发时我都会收到此错误
System.BadImageFormatException未处理消息:未处理 类型' System.BadImageFormatException'发生在 System.Windows.Forms.dll其他信息:无法加载文件 或汇编' Microsoft.DirectX.AudioVideoPlayback.dll'或其中一个 依赖。不是有效的Win32应用程序。 (例外 HRESULT:0x800700C1)
然后我将目标CPU设置为x86,我收到此错误
System.IO.FileLoadException未处理消息:未处理 类型' System.IO.FileLoadException'发生在 System.Windows.Forms.dll其他信息:混合模式程序集 是针对版本' v1.1.4322'运行时并不能 无需额外配置即可在4.0运行时加载 信息。
到目前为止,我已尝试卸载 - 重新安装DirectX SDK,安装与DirectX和不同声音文件(.wav)有关的所有内容。
此外,我不得不浏览加载.dll,我无法在Reference Manager> Assemblies下找到它们,但现在我甚至无法通过浏览加载它们,所以我使用Imports Microsoft.DirectX.AudioVideoPlayback
它会让我导入其余的.dll,除了(参考管理器甚至不打开它们):
Microsoft.DirectX.AudioVideoPlayback.dll
Microsoft.DirectX.dll
Microsoft.DirectX.DirectSound.dll
我需要的那些。有没有办法清理重新安装它们?
目标框架:.Net Framework 4.5
CODE:
Dim MySound1 As New Microsoft.DirectX.AudioVideoPlayback.Audio("D:\path\sound_file.mp3")
MySound1.Play()
如果您需要了解其他任何内容,请与我们联系。
更新:
我将Target Framework
更改为.Net Framework 3.5
并且只有CPU Target
设置为x86
才能正常工作!那是为什么?
答案 0 :(得分:4)
您正在使用旧的Managed DirectX包装器。目标是在.NET 1.1上运行,这是一个从不支持64位代码的框架版本。这些包装器很久以前就被弃用了,2.0版本从未超出测试范围。
需要将EXE的平台目标更改为x86,没有64位版本的Managed DirectX,并且DLL包含用托管C ++编写的本机32位代码。此外,如果您的目标是.NET 4.0或更高版本,那么您必须使用.config文件,该文件说可以加载这样一个古老的程序集,该程序集希望本机代码在.NET 1.1上运行良好。它应该是这样的:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
useLegacyV2RuntimeActivationPolicy 属性会抑制您收到的错误消息。它是否真的可以在4.0+上运行并不是那么清楚,没有人再使用这些包装器了。通常的建议是切换到SharpDX或SlimDX。