很少的几行代码,却令我如些头疼,在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文件就行.
就是这样简单,麻烦大家帮我测一下吧.看看问题究竟出在哪里?