无法加载文件或程序集X或其依赖项之一。不是有效的Win32应用程序。 (HRESULT:0x800700C1)

时间:2014-10-12 10:30:10

标签: .net vb.net dll directx audiovideoplayback

操作系统: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才能正常工作!那是为什么?

1 个答案:

答案 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。