我在资源文件*.res里放了我要使用的WAV文件。在编译成EXE文件后,在程序使用的过程中,会经常的出现错误而关闭程序。这是为什么我用的方法如下:
在模块里放入代码:
Option Explicit
Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Public Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Public Const SND_ASYNC = &H1&
Public Const SND_MEMORY = &H4&
在form窗口中的图版点击属性中加下
Private Sub Image6_Click()
    Dim bArr() As Byte
    bArr = LoadResData("huishou", "Custom")
    sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY***
***
end sub
窗口中使用此方法的有好几处。在程序使用的过程中经常的出现错误,而关闭程序。请高手帮忙解答一下。

解决方案 »

  1.   

    把声明改成   Private   Declare   Function   sndPlaySoundFromMemory  Lib   "winmm.dll"   Alias   "sndPlaySoundA"   (ByVal   lpszSoundName   As   Long,   ByVal   uFlags   As   Long)   As   Long   
        
      调用时用   sndPlaySoundFromMemory  VarPtr(bArr(0)),   SND_ASYNC   Or   SND_MEMORY     
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  2.   

    在声明中如果使用private 就会出现sndplaysoundfrommemory子程序或函数未定义。如果使用public程序就可以正常使用。但是常常会出错。
      

  3.   

    你声明在模块里当然要用public了
    出现什么错误 把错误信息发上来看看
      

  4.   

    代码没有错误,就是在编译成EXE文件运行后。老是出现文件错误.................然后就会退出程序。
    我用的是XP系统,就是和一般程序出错是一样的。发送什么错误报告那样。
    我如果在click中不加入调用声音就不会出错。
    个人猜想,应该是第一个声音没结束而调用第二个声音文件,导至2声音冲突而发现的错误。
    或者是2个文件调用的时间出现问题。绝对和我调用资源文件里的声音文件有关。
    有没有什么函数可以检查第一个声音文件关闭没有。或是强制先关闭第一个声音文件,再打开现在使用的声音
    在程序中,使用第二个声音文件就会自动关闭第一个声音文件。也可能是在这里出现错误。关闭不了第一个声音文件吧。有时候声音文件在第一个正在播放的时候去调第二个调不出来声音,但第一个声音也关闭了。其中有时候会出现程序错误而退出。