清教一个关于WINFROM播放声音和DllImport DLL的问题

hiose89 2016-09-08 08:24:31
在WINFORM里面,MS自带播放声音的类 不支持多线程,DX又是.NET 4.0不能用

所以我在网上找了例子 用了[DllImport("winmm.dll")]
在VS里调试运行的时候一切正常,

可我把生成的EXE 放在别他文件夹直接打开运行的时候 却没有了声了,其他功能正常。
这是为什么呢?

DllImport不是可以自动寻找DLL的吗
后面我直接给绝对路径,让他到SYSTEM32 定位去找也不行。

后来又把winmm.dll直接放在当前文件夹下也不行, 声音文件的路径是对的
这是为什么呢,我该怎么解决这个问题?求大神指教
...全文
165 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
白衣如花 2016-09-09
  • 打赏
  • 举报
回复
建议写日志文件,在播放前后都添加打印 怀疑是音频文件没找到
hiose89 2016-09-09
  • 打赏
  • 举报
回复
谁来帮我看看~~~~是不是函数哪有问题?
hiose89 2016-09-08
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
我这里无此现象 是声音文件的位置不对吧
不可能吧,声音文件我用的是相对路径,多次调试 路径都是对的。 而且我项目里还有用到.NET自带的soundpaly 两种播放器soundpaly 和mciSendString 一起混着用的 都用的是同一路径,soundpaly 就有声音。 下面是代码 。 [DllImport(@"C:\Windows\System32\winmm.dll")] public static extern bool mciGetErrorString(Int32 errorCode, StringBuilder errorText, Int32 errorTextSize); [DllImport(@"C:\Windows\System32\winmm.dll")] public static extern Int32 mciSendString(string lpszCommand, StringBuilder returnString, int bufferSize, IntPtr hwndCallback); public SoundPlayer PlaySound(string clicktype) { palysound=new SoundPlayer(soundpath+"\\"+clicktype+".wav"); //MessageBox.Show(soundpath + "\\" + clicktype + ".wav"); palysound.PlaySync(); return palysound; } public void MciPlay(string name) { name = soundpath +@"\"+ name+".wav"; //MessageBox.Show(name); mciSendString(@"close myDivece", null, 0, new IntPtr(0)); mciSendString(@"open " +name + " alias myDivece", null, 0, new IntPtr(0)); mciSendString("play myDivece", null, 0, new IntPtr(0)); } 我WIN7 64位 VS是2012 不过我想因该和这个没关系吧
xuzuning 2016-09-08
  • 打赏
  • 举报
回复
我这里无此现象 是声音文件的位置不对吧

111,128

社区成员

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

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

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