程序出现异常尝试读取或写入受保护的内存这通常指示其他内存已损坏

陈小猫 2011-03-11 07:14:19
求高手指点!!~

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
WMPLib.WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
wmp.URL="G:\\音乐\\Snow.mp3";
wmp.controls.play();
}
}
}

程序出现异常尝试读取或写入受保护的内存这通常指示其他内存已损坏
...全文
277 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yalan 2011-03-11
  • 打赏
  • 举报
回复
为你写了个小例子。
将windows media player控件拖到窗体后,双击打开按钮,输入代码即可,附完整例子



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace wmp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void toolStripLabel1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "多媒体文件(*.mp3;*.wma;*.avi;*.mpg;*.wmv)|*.mp3;*.wma;*.avi;*.mpg;*.wmv";
ofd.Multiselect = false;
if (ofd.ShowDialog() == DialogResult.OK)
{
axWindowsMediaPlayer1.URL = ofd.FileName;
axWindowsMediaPlayer1.Ctlcontrols.play();
}
}
}
}



附wmp.dll详细属性:

enableContextMenu:Boolean 显示/不显示播放位置的右键菜单
fullScreen:boolean 全屏显示
stretchToFit:boolean 非全屏状态时是否伸展到最佳大小
uMode:string 播放器的模式,full:有下面的控制条; none:只有播放部份没有控制条
playState:integer 当前控件状态,下面是三种基本状态:
3:正在播放
2:暂停
1:已停止
状态变化时会触发OnStatusChange事件

[controls]
可通过WindowsMediaPlayer.controls对播放器进行控制并取得相关的一些信息:
controls.play; 播放
controls.stop; 停止
controls.pause; 暂停
controls.currentPosition:Double 当前播放进度
controls.currentPositionString:string 时间格式的字符串 "0:32"

[currentMedia]
可以通过WindowsMediaPlayer.currentMedia取得当前媒体的信息
currentMedia.duration Double 总长度
currentMedia.durationString 时间格式的字符串 "4:34"

[settings]
可以通过WindowsMediaPlayer.settings对播放器进行设置,包括音量和声道等。
settings.volume:integer 音量 (0-100)
settings.balance:integer 声道,通过它应该可以进行立体声、左声道、右声道的控制。

=================

版本2:

属性/方法名: 说明:
[基本属性]  
url:string指定媒体位置,本机或网络地址
uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible
playState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪
enableContextMenu:Boolean; 启用/禁用右键菜单
fullScreen:boolean; 是否全屏显示
[controls] wmp.controls //播放器基本控制
controls.play; 播放
controls.pause; 暂停
controls.stop; 停止
controls.currentPosition:double; 当前进度
controls.currentPositionString:string; 当前进度,字符串格式。如“00:23”
controls.fastForward; 快进
controls.fastReverse; 快退
controls.next; 下一曲
controls.previous; 上一曲
[settings] wmp.settings //播放器基本设置
settings.volume:integer; 音量,0-100
settings.autoStart:Boolean; 是否自动播放
settings.mute:Boolean; 是否静音
settings.playCount:integer; 播放次数
[currentMedia] wmp.currentMedia //当前媒体属性
currentMedia.duration:double; 媒体总长度
currentMedia.durationString:string; 媒体总长度,字符串格式。如“03:24”
currentMedia.getItemInfo(const string); 获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Description"=媒体内容描述,"Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址
currentMedia.setItemInfo(const string); 通过属性名设置媒体信息
currentMedia.name:string; 同 currentMedia.getItemInfo("Title")
[currentPlaylist] wmp.currentPlaylist //当前播放列表属性
currentPlaylist.count:integer; 当前播放列表所包含媒体数
currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia
MediaPlayer1.Play          播放
MediaPlayer1.Stop          停止
MediaPlayer1.Pause          暂停
MediaPlayer1.PlayCount        文件播放次数
MediaPlayer1.AutoRewind       是否循环播放
MediaPlayer1.Balance         声道
MediaPlayer1.Volume         音量
MediaPlayer1.Mute          静音
MediaPlayer1.EnableContextMenu    是否允许在控件上点击鼠标右键时弹出快捷菜单
MediaPlayer1.AnimationAtStart    是否在播放前先播放动画
MediaPlayer1.ShowControls      是否显示控件工具栏
MediaPlayer1.ShowAudioControls    是否显示声音控制按钮
MediaPlayer1.ShowDisplay       是否显示数据文件的相关信息
MediaPlayer1.ShowGotoBar       是否显示Goto栏
MediaPlayer1.ShowPositionControls  是否显示位置调节按钮
MediaPlayer1.ShowStatusBar      是否显示状态栏
MediaPlayer1.ShowTracker       是否显示进度条
MediaPlayer1.FastForward       快进
MediaPlayer1.FastReverse       快退
MediaPlayer1.Rate          快进/快退速率
MediaPlayer1.AllowChangeDisplaySize 是否允许自由设置播放图象大小
MediaPlayer1.DisplaySize       设置播放图象大小
    1-MpDefaultSize         原始大小
    2-MpHalfSize           原始大小的一半
    3-MpDoubleSize          原始大小的两倍
    4-MpFullScreen          全屏
    5-MpOneSixteenthScreen      屏幕大小的1/16
    6-MpOneFourthScreen       屏幕大小的1/4
    7-MpOneHalfScreen        屏幕大小的1/2
MediaPlayer1.ClickToPlay       是否允许单击播放窗口启动Media Player
脾气不坏 2011-03-11
  • 打赏
  • 举报
回复
先检查下路径是否正确 文件是否存在?
另外,为什么要自己定义WindowsMediaPlayer变量?
yalan 2011-03-11
  • 打赏
  • 举报
回复
当你把windows media player控件从工具箱拖入窗体后,在窗体.designer.cs中会自动生成如下代码:
private AxWMPLib.AxWindowsMediaPlayer axWindowsMediaPlayer1;

然后,你在你的代码视图中可以如下操作:
private void button1_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.URL="G:\\音乐\\Snow.mp3";
axWindowsMediaPlayer1.Ctlcontrols.play();
}


你好几处错误了~~~~~~
yalan 2011-03-11
  • 打赏
  • 举报
回复
WMPLib.WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer();

这一句错误!
当你把wmp控件拖入窗体后会自动生成实例,你这样写是错误的
枪牌 2011-03-11
  • 打赏
  • 举报
回复
WMPLib.WindowsMediaPlayer 内部的问题
C++写的!?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧