vb6用sndPlaySound播放wav资源文件有关问题

vb6用sndPlaySound播放wav资源文件问题
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Private Const SND_ASYNC = &H1 '异步播放,否则就独占播放
Private Const SND_NODEFAULT = &H2 '不使用缺省声音
Private Const SND_MEMORY = &H4 '指向一个内存文件
Private Const SND_FILENAME = &H20000 '指向一个实际文件
Private Const SND_LOOP = &H8 '循环播放
Private Const SND_ALIAS_START = 0 '结束播放
Dim B() As Byte

Private Sub Command1_Click() '播放
B = LoadResData(101, "CUSTOM")
sndPlaySound B(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY Or SND_LOOP
End Sub

Private Sub Command2_Click() '停止
sndPlaySound B(0), SND_ALIAS_START
End Sub
两个问题:
1.启动程序后,先不点击 Command1(即不播放)而点一下 Command2(停止),则“实时错误:9.下标越界。”
2.启动程序后,点击 Command1(播放),在播放之中点Command2(停止),但停止语句无效。
查网上资料找不到解决办法。刚接触vb,请VB高人指点一下。

------解决方案--------------------
看看这本书,上面有,第三章
http://download.****.net/source/3050780
------解决方案--------------------
第一个问题可用API函数SafeArrayGetDim判断数组B()是否初始化;第二个问题不存在,我测试了一下,可以停止(我打了VB6补丁SP6)。
VB code
Option Explicit

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long 'API判断数组为空或没有初始化

Private Const SND_ASYNC = &H1 '异步播放,否则就独占播放
Private Const SND_NODEFAULT = &H2 '不使用缺省声音
Private Const SND_MEMORY = &H4 '指向一个内存文件
Private Const SND_FILENAME = &H20000 '指向一个实际文件
Private Const SND_LOOP = &H8 '循环播放
Private Const SND_ALIAS_START = 0 '结束播放

Dim B() As Byte
Dim IniArray As Long '判断数组B()是否初始化

Private Sub Command1_Click() '播放
    B = LoadResData(101, "CUSTOM")
    IniArray = SafeArrayGetDim(B)
    sndPlaySound B(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY Or SND_LOOP
End Sub

Private Sub Command2_Click() '停止
    If IniArray > 0 Then sndPlaySound B(0), SND_ALIAS_START
End Sub