【发布时间】: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