| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 879 人关注过本帖
标题:很少的几行代码,却令我如些头疼,在vb吧与吧主cbm666探讨了很长时间,就是弄不 ...
只看楼主 加入收藏
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
结帖率:86.25%
收藏
 问题点数:0 回复次数:9 
很少的几行代码,却令我如些头疼,在vb吧与吧主cbm666探讨了很长时间,就是弄不明白为

很少的几行代码,却令我如些头疼,在vb吧与吧主cbm666探讨了很长时间,就是弄不明白为什么?同样的几行代码,在不同的机器上为何执行效果不同呢?
------------------------
由于想学习资源文件的使用,从网上下载了cbm666的源码研究.
功能就是将一个wav文件存到资源文件中,然后单击按钮command1就播放这段wav音乐.

可是同样的代码,在我家中与单位,执起起来效果不同.
请看我的代码中的注释就明白了.
如果我表述不清,请看一下我发的源贴.
http://post.baidu.com/f?kz=250275345

代码如下:
'播放 WAVE 声音(只允许.wav)

Option Explicit
Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1
Const SND_MEMORY = &H4
Dim bArr() As Byte '这句在这里声明可以,可是放在command的单击事件声明就是不可以,不知为什么


Private Sub Command1_Click()

'如果将barr数组定义在下面这个位置,则三台电脑都有出现vb异常关闭的现象,但不是每次都关闭,没找到原因.
'Dim bArr() As Byte '放在这里声明不可以(在单位的两台电脑上测试不发声,在家中试则是编译成exe文件后第一次单击command不出声,以后就出声,不编译在vb环境中测试没有问题,只是编译后才出现)

bArr = LoadResData(101, "CUSTOM")
DoEvents
sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
' MsgBox "等一下" '如果barr变量定义在command的单击事件中,加这一句,在单位的电脑上将会出声,
'Erase bArr '加上这一句,在单位的两台电脑上就不出声了,可是在家中的电脑上,却没有任何变化。
End Sub


其实问题的本质就是
Dim bArr() As Byte 这一句应该放在哪里合适,是放在通用区中声明呢?还是放在按钮的单击事件中声明呢?
我与cbm666争论的焦点也在这里.
因为我如果将
Dim bArr() As Byte 放在通用区,好象不出问题,如果放在按钮单击事件中,在不同机器上均有不同的反应.单位的电脑不论是VB环境中还是编译后根本不出声.家是的电脑编译后,第一次单击按钮时不出声.以后就出声了(注,不编译时,在vb环境中是没有问题的)

可是cbm666也试过多次,他说三台电脑都试了,没发现我说的问题.
真有点怪了.同样的代码,在我自已的两台电脑上执行效果也不一样,只好请大家帮忙了.

注,这个项目的代码全这里了,请大家帮我测试一下,看看出不出问题.
这个项目只有一个窗体,和一个资源文件,资源文件中加入一个wav文件就行.
就是这样简单,麻烦大家帮我测一下吧.看看问题究竟出在哪里?

搜索更多相关主题的帖子: 吧主 代码 头疼 探讨 时间 
2007-08-20 22:48
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
收藏
得分:0 
回复:(ggyy66)很少的几行代码,却令我如些头疼,在vb...
pm2b5T1Q.rar (431.77 KB) 很少的几行代码,却令我如些头疼,在vb吧与吧主cbm666探讨了很长时间,就是弄不明白为什么?同样的几


把我的项目发上来了,大家帮测一下,看看在您的电脑上出不出我说的问题.

2007-08-20 22:50
lisypro
Rank: 4
等 级:业余侠客
威 望:3
帖 子:695
专家分:216
注 册:2005-9-25
收藏
得分:0 
吧主真笨呀,这与变量的生存期有关系呀

长期承接管理系统
代做各种vb/ / vc小程序
QQ:82341763
手机:13623290828
群号 11619730
2007-08-20 23:05
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 

'播放 WAVE 声音(只允许.wav)

Option Explicit
Private Declare Function
sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Const
SND_ASYNC = &H1
Const SND_MEMORY = &H4
'Dim bArr() As Byte '这句在这里声明可以

Private Sub Command1_Click()
Dim bArr() As Byte '放在这里声明不可以
bArr = LoadResData(101, "CUSTOM")
DoEvents
'sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
sndPlaySoundFromMemory bArr(0), SND_MEMORY
'MsgBox ""
Erase bArr '加上这一句,就不出声了。
End Sub

F8单步运行执行那句都有声音不管你放到什么地方DIM……

你里面的3个程序,我这里运行都出声!

可能是安装了VB环境造成的?


快上课了……
2007-08-21 00:25
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
第一次单击按钮时不出声.以后就出声了
可能我太快了,是这个效果……不过如果打开关闭快的话,会有第一次就能听到的情况……

快上课了……
2007-08-21 00:30
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 

帮你测试完了……

Option Explicit
Private Declare Function
sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Const
SND_ASYNC = &H1
Const SND_MEMORY = &H4

Dim bArr() As Byte

Private Sub Command1_Click()

bArr = LoadResData(101, "CUSTOM")
'DoEvents
sndPlaySoundFromMemory bArr(0), SND_MEMORY
Erase bArr
End Sub
上面没有SND_ASYNC的,没有DoEvents,Dim在2个位置都有声音!

带上SND_ASYNC:
去掉了DoEvents程序放到公共部分dim程序死掉了(是我2次按的太快),过程中第一次没有声音第2次有(太快了还是会死)……

加上后,Dim放在任何位置,有SND_ASYNC在任何情况也可以。

感觉DoEvents才是关键?

如果在擦除后面加MSGBOX,带ASYNC的你DIM到哪里都没有声音!(你MSGBOX是放到擦除前,这个位置问题变的更诡异拉)
在MSGBOX前加DOEVENTS又声音了!

PS:资源文件可以使用WAV格式而不用使用自定义资源……(RC编译到RES,可以使用WAVE类型)VB自带的资源编辑器只有String,Bitmap,和光标icon好像……


快上课了……
2007-08-21 01:09
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
收藏
得分:0 
真是谢谢版主了,帮我测了半天,道理还是不明白.
您的测试与我的机器又有些差异.

2007-08-21 07:58
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
收藏
得分:0 
总之很感谢版主了,因为在VB吧与吧主cbm666老师探讨这个问题时,他说在他的三台机器上测试都没有任何问题,可是我也在三台机器上测试,都出现不同的问题.
我怀疑是我的机器都有问题,所以又在本论坛求助,经版主一试,我就放心了,看来我的机器应该没有问题.
因为版主的机器测试代码时也出现了类似问题.

2007-08-21 08:05
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
收藏
得分:0 
PS:资源文件可以使用WAV格式而不用使用自定义资源……(RC编译到RES,可以使用WAVE类型)VB自带的资源编辑器只有String,Bitmap,和光标icon好像……
-------------------
VB中的资源管理器如何加入专门的wav格式呀,而不用自定义资源。
另外, 用自定义资源有何不好吗?

2007-08-21 08:57
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
WAV格式的,可以直接播放……
就像icon可以直接,bitmap有方法可以直接读取……

快上课了……
2007-08-21 14:49
快速回复:很少的几行代码,却令我如些头疼,在vb吧与吧主cbm666探讨了很长时间,就 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018140 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved