一个简单的程序:主窗口调用一个子窗口,子窗口放了一个TWindowsMediaPlayer(从System32\wmp.dll安装的ActiveX控件,相信很多人用过这个多媒体播放控件),当我关闭并释放子窗口时,经常会出错由wmp.dll引起的内存错误,大概是访问了不合法的内存地址。这个错误并不是每次都发生,在播放的媒体内容相同的情况下进行多次测试,一般十次有一次出错,运气不好时第一次就出错。
有没有人遇到过类似问题?帮帮忙啦
我用的是Delphi7,Windows Media Player 版本是9,10的也设过,同样出错。
有没有人遇到过类似问题?帮帮忙啦
我用的是Delphi7,Windows Media Player 版本是9,10的也设过,同样出错。
解决方案 »
- sql语句中如何查询一个字段的值为偶数的记录呢?
- 如果使DBgrid右侧移动滚动条时,当前记录不变啊?如果不行,有替换的组件吗
- 你们用DELPHI做的软件 皮肤是怎么做的啊
- SQL中的引号
- 请教一个问题,在线等待!
- 哪里有好的免费的计数器或提供免费的统计服务啊?
- 请教一个对我来说比较难的问题:怎样把dbgrid中的数据更新回原库中?
- 怎么实现用权限的添加呀?
- 谁知道如果不把JPG文件转成BMP,直接载入IMAGE组件里怎么画图
- 请高手指点:ToDo到底是做什么用的,应该怎么用呢?
- 《thinking in Delphi》这本书出版了没?
- Delphi2007中调试ActiveX,为什么断点不好用?
原代码很简单,基本没有什么原码,就是:
放一个TWindowsMediaPlayer控件,
设置属性iuMode为none,属性enableContextMenu为False,
在子窗口Close事件中,Action=caFree;主窗口有一个按钮,点击就创建子窗口,在创建子窗口后,WindowsMediaPlayer1.URL='媒体文件名';当不断点按钮创建子窗口并关闭子窗口时,有时候关闭子窗口就出错了。
很容易就可以写出程序来测试的,我用几台机试过,回家用家里的电脑也试过都出现这个问题。说跟踪这种问题真不知道怎样跟踪,不是每次都出现,而且错误估计是在窗口释放之后的,程序应该是捕捉不到的。
估计是控件释放时,wmp内核播放未完全停止,并且访问已释放的内存。
我在释放之前进行WindowsMediaPlayer1.controls.stop;并等待一段时间,仍然会出错,这就不明白了。
你是不是用Delphi呢,你是关闭窗口后声音仍在吗?如果是,可能是你没有释放窗口,窗口只是隐藏了,媒体还在后台播放,当然有声音
动态生成也试过,是一样的。
我想与动态生成或设计时生成无关,应该还是控制释放有关,估计是释放和内核的停止和释放不协调有关,只是不知怎样处理。
有时候,错误使得整个程序出现严重错误关闭
http://blog.csdn.net/findwo/archive/2008/03/19/2196693.aspx
有些启发,学到了些东西,但我的这个问题可能解决不了,我这里的dll是windows再的媒体播放器的wmp.dll,无法修改,而且我的出错是偶然的,并不是每次都出错,我测试过很多,一可能说都是播放过媒体后,释放就有问题to: supercc
其实这个控件用起来一点也不麻烦,倒是d自带的TMediaPlayer很难用,又不好控制