Windows 媒体播放器设计器视图抛出 CPU 和库错误

Windows Media Player Designer View throwing CPU and lib errors

我有一个名为 VideoForm 的表单,其中有一个名为 player 的 Windows 媒体播放器。

public AxWMPLib.AxWindowsMediaPlayer player;

当我打开 VideoFrame.cs [设计] 时出现两个错误:

Could not find type 'AxWMPLib.AxWindowsMediaPlayer'

The variable 'player' is either undeclared or was never assigned.

如果我在我的解决方案中创建一个新表单并尝试向其中添加 Windows 媒体播放器,我会收到此错误:

Failed to create component 'AxHost' The error message follows: 'System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types.

(下面列出的大量类型基本上相当于“工具箱需要制作控件的东西”)

我已经尝试过:重新启动 Visual Studio,重新启动我的计算机,删除并重新导入库,切换到 32,构建,然后切换回 64 和再次构建,并在我的机器上手动查找 lib 文件。

但这是奇怪的部分 - 如果我关闭此解决方案,打开另一个解决方案,添加一个 Windows 媒体播放器,编译为 64 位,然后关闭并重新打开原始解决方案我没有得到错误!
编辑:但是,当我尝试上述“hack”时,我确实遇到了以下两个错误:

Warning Processing COM reference "WMPLib" from path "C:\Windows\system32\wmp.dll". Type library importer encountered a property getter 'sessionPlaylistCount' on type 'WMPLib.IWMPNowPlayingHelperDispatch' without a valid return type. The importer will attempt to import this property as a method instead.

Processing COM reference "WMPLib" from path "C:\Windows\system32\wmp.dll". At least one of the arguments for 'IWMPGraphEventHandler.NotifyAcquireCredentials' cannot be marshaled by the runtime marshaler. Such arguments will therefore be passed as a pointer and may require unsafe code to manipulate.

我认为我遇到了内存泄漏但不知所措,而且我在运行时在线程或 GPU 线程中看不到任何内容 windows。

我不认为这是我的代码导致的,但是如果您想查看代码注释,我会添加相关部分。

我找到了这个问题的解决方案:

{
Warning 1 Processing COM reference "WMPLib" from path "C:\Windows\system32\wmp.dll". Type library importer encountered a property getter 'sessionPlaylistCount' on type 'WMPLib.IWMPNowPlayingHelperDispatch' without a valid return type. The importer will attempt to import this property as a method instead.

Warning 2 Processing COM reference "WMPLib" from path "C:\Windows\system32\wmp.dll". At least one of the arguments for 'IWMPGraphEventHandler.NotifyAcquireCredentials' cannot be marshaled by the runtime marshaler. Such arguments will therefore be passed as a pointer and may require unsafe code to manipulate.
}

如果您收到这些错误, 这并不意味着您的应用程序不会 运行。 但是如果你编译你的程序并且它没有 运行,那么 Windows 上的安装文件可能是旧的。 在这种情况下,您可以设置以下内容:

  1. 将您的程序框架设置为4客户端版本;
  2. 设置你的程序平台为X86;和
  3. 在框架 4 客户端上创建安装程序。