【问题标题】:Windows Media Player Designer View throwing CPU and lib errorsWindows Media Player 设计器视图引发 CPU 和库错误
【发布时间】:2015-08-05 21:15:34
【问题描述】:

我有一个名为 VideoForm 的表单,它有一个名为 player 的 Windows Media Player。

public AxWMPLib.AxWindowsMediaPlayer player;

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

找不到类型“AxWMPLib.AxWindowsMediaPlayer”

变量“player”要么未声明,要么从未赋值。

如果我在我的解决方案中创建一个新表单并尝试向其中添加一个 Windows Media Player,我会收到以下错误:

未能创建组件“AxHost”错误消息如下: 'System.Reflection.ReflectionTypeLoadException:无法加载一个或 更多请求的类型。

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

我试过:重启Visual Studio,重启电脑,删除并重新导入库,切换到32,构建,然后切换回64并再次构建,并手动找到lib我机器上的文件。

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

警告处理来自路径的 COM 引用“WMPLib” “C:\Windows\system32\wmp.dll”。类型库导入器遇到一个 类型上的属性获取器“sessionPlaylistCount” 'WMPLib.IWMPNowPlayingHelperDispatch' 没有有效的返回类型。 导入器将尝试将此属性作为方法导入。

处理来自路径的 COM 引用“WMPLib” “C:\Windows\system32\wmp.dll”。至少有一个论据 无法封送“IWMPGraphEventHandler.NotifyAcquireCredentials” 由运行时封送处理程序。因此,此类参数将被传递为 一个指针,可能需要不安全的代码来操作。

我认为我遇到了内存泄漏但不知所措,并且在运行时我在线程或 GPU 线程窗口中什么都看不到。

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

【问题讨论】:

  • 我相信Hans Passant's answer 很好地解释了这个问题。我也遇到过同样的事情。
  • @Meloviz 我不再在这个项目中工作,也没有要测试的代码,但我同意,这个答案看起来很合理,如果你说它对你有用,我敢打赌它对我有用。

标签: c# memory-leaks windows-forms-designer wmp


【解决方案1】:

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

{
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 客户端上创建您的安装程序。

【讨论】:

  • 我不知道这是否是解决方案 - 我不再有权访问这个项目、平台、代码等。无论如何,我会接受你的回答,但我不能说我真的知道你是否正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多