以前我把后缀名改成dll很容易就会被发现
   能不能做成一种纯资源文件,只能通过软件调用,而不会出现将dll改成mp3就能播放。
 还有其他的方法吗

解决方案 »

  1.   

    Option Explicit
    Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
    Private 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&
    Private Sub Command5_Click() 注释:播放 WAV 文件
    Dim bArr() As Byte
    bArr = LoadResData(102, "WAVE")
    sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
    End Sub
                这样竟然提示我,VB6.EXE 错误会被windwos关闭
      

  2.   

    呵呵,楼上的代码在单步调试的时候没什么问题,但是连续执行会出错,所以判断LoadResData后windows还没来得及喘一口气就开始执行sndPlaySoundFromMemory 导致出错。解决的办法在sndPlaySoundFromMemory 之前doevents一下就不会出错了。
      

  3.   

    我靠 我想查查doevents 怎么用  MSDN 竟然也非法关闭了 hh.exe会被windows关闭
      

  4.   

    Private Sub Command5_Click() 注释:播放 WAV 文件
    Dim bArr() As Byte
    bArr = LoadResData(102, "WAVE")doevents 
    sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
    End Sub同样是被关闭
      哭了
      

  5.   

    首先设置断点,看看 bArr 是否获得了正确的数据,其次单步跟踪执行下去,至少在我的机器上这一切是正常的,如果不添加doevents的确也是会非正常退出VB。或者试着连续添加多个doevents。还有就是前面如果已经发生过多次非正常退出的情况建议你重新启动一下机器,如果你用的是9X系统,这样的异常情况很容易产生系统问题
      

  6.   

    来自MysticBoy的站点!>>>>>>>>>>>>>>>
    http://www.mysticboy.nease.net/docs/codes/new_page_1.htm
    CoderHelper 是怎样播放资源中的声音的?
    ch为实现在每执行完一个命令后用声音标识执行的结果!采用了一下技术!首先加载两中声音到资源文件中,标识为 wav 101,102. 101 为执行成功,102 为执行失败!
    为此,你可以使用 PlayResWav 函数,来播放. 范例如下
    PlayResWav Iif(Err.Number=0,101,102) ' 此行中,如果无错执行,播放101号资源
     
    以下是所需代码,该代码可以做很多用途,其中的函数,将会是你以后编程中可能用到的,建议收藏!请把以下代码放在模块中!Option ExplicitDeclare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _
    (lpszSoundName As Any, ByVal uFlags As Long) As LongGlobal Const SND_ASYNC = &H1 ' 异步播放
    Global Const SND_NODEFAULT = &H2 ' 不使用缺省声音
    Global Const SND_MEMORY = &H4 '播放内存Public Sub PlayResWav(ID As Long)
    On Error GoTo errH
    Dim bty() As Byte
    bty = LoadResData(ID, "Sound")
    BeginPlaySound bty
    errH:
    End SubPublic Sub BeginPlaySound(SoundBuffer() As Byte)
    On Error GoTo errH
    sndPlaySound SoundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY
    errH:
    End Sub
    Public Sub EndPlaySound()
    On Error GoTo errH
    sndPlaySound ByVal vbNullString, 0&
    errH:
    End SubSub Wait(Optional TimeOut As Single = 0.2)
    Dim Tmp As Single
    Tmp = Timer
    Do Until Timer > Tmp + TimeOut
    DoEvents
    Loop
    End Sub
      
      

  7.   

    关注,最好是一个原DOS命令行程序嵌在自己的VB程序里,"内部调用"。
      

  8.   

    olonely(Only Lonely) (
    的我也用过  报错  我的那个WAV20M 是不是太大了还有就是我加1、2、3、4、6、7、8个doevents   都是错误
       而加5个doevents  竟然一运行就消失了我靠靠靠靠靠靠靠靠靠靠靠靠靠
      

  9.   

    最好是一个原DOS命令行程序嵌在自己的VB程序里,"内部调用"。应该如何实现呢