如何读取.res文件中数据,里面是声音文件!
欢迎各路大虾帮忙,谢谢!

解决方案 »

  1.   

    假定在资源文件里定义了如下声音资源:
    bg WAVE bgm2.wav则可用函数LoadResData调用该资源,调用后可用API函数sndPlaySound播放此声音资源.代码如下:
    '先在声明部分声明:
    Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Private Const SND_MEMORY = &H4         
    Private Const SND_ASYNC = &H1         '调用模块
    Private Sub Command1_Click()
        Dim bArr() as Byte               '定义一个空的Byte数组
        bArr=LoadResData("bg","WAVE")    '加载名为"bg"的声音资源
        sndPlaySound bArr(0),SND_MEMORY OR SND_ASYNC     '播放声音资源
    End Sub
      

  2.   

    to guochj624(伤感男孩):
    我只能用VC打开.res文件才能看清里面的文件,用VB打开只是一整个模块,里面有什么都不清楚。
    你说要在资源文件里定义了如下声音资源,我不知道在哪里定义,请你写得具体一点。谢谢!
      

  3.   

    在VB中打开资源文件
    首先需要在外接程序管理器中加载资源编辑器 Resource Editor
    然后在工程中加入你要查看或者编辑的.res资源文件
    双击资源文件,即可编辑你的资源,类型有字符串、图片、图标、自定义资源VB为支持.res资源增加了三个函数:LoadResPicture()、LoadResString()和LoadResData()。
    LoadResPicture()函数用于调入位图、图标和光标资源,其作用非常类似LoadPicture()函数,不过LoadPicture是从磁盘文件中读取图形。LoadResPicture的格式为:
        LoadResPicture(资源ID号,资源类型)
        资源类型可为vbResBitmap、vbResIcon、vbResCursor,分别对应着位图、图标和光标三种资源。得到的图形可以直接赋与Picture属性,或在使用PaintPicture方法时使用。
        LoadResString()函数用于调入字符串资源。字符串资源对于开发多语种软件比较有用。其使用格式为:
       LoadResString(资源ID号)
        LoadResData()函数可以调入各种资源。使用格式为:
        LoadResData(资源ID号,资源类型)资源类型分类1 
     光标 
     2 
     位图 
     3 
     图标 
     

     菜单 
     5 
     对话框 
     6 
     字符串 
     

     字体目录 
     8 
     字体 
     9 
     加速键 
     
    10 
     用户定义资源 
     12 
     设备无关光标 
     14 
     设备无关图标 
      

  4.   

    to guochj624(伤感男孩):
    不行啊,能不能说得具体一点。thanks!
      

  5.   

    播放资源文件文件中的声音VB 提供的方法使我们可以很容易地使用资源文件中的字符、图片等资源。我们可以用以
    下方法播放资源文件中的 wav 声音: 
    首先,在你的资源文件的源文件 (RC) 文件加入下面一行: 
    MySound WAVE c:\music\vanhalen.wav 
    然后将其编译为 RES 文件。最后使用下面的声明及代码: 
    Private Declare Function PlaySound Lib _ "winmm.dll" Alias "PlaySoundA" ( _
    ByVal lpszName As String, _
    ByVal hModule As Long, _
    ByVal dwFlags As Long) As Long
    Private Const SND_ASYNC& = &H1 
    Private Const SND_NODEFAULT& = &H2 
    Private Const SND_RESOURCE& = &H40004 
    Dim hInst As Long 
    Dim sSoundName As String 
    Dim lFlags As Long 
    Dim lRet As Long 
    Private Sub Command1_Click() 
    hInst = App.hInstance 
    sSoundName = "MySound" 
    lFlags = SND_RESOURCE + SND_ASYNC + _ SND_NODEFAULT 
    lRet = PlaySound(sSoundName, hInst, lFlags) 
    End Sub
      

  6.   

    还有一种方法,这段代码是我用过的,经测试没有问题.例如你要播放的资源文件为这样的
    类型: "WAVE"
    标识号:101
    那么用如下代码播放:'以下代码放在一个别Form里
    Option Explicit
    Private Declare Function sndPlaySound Lib "winmm" Alias _
    "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) _
    As Long
    Private Const SND_SYNC = &H0
    Private Const SND_NODEFAULT = &H2
    Private Const SND_MEMORY = &H4
    Private Sub PlayWaveRes(vntResourceID As Variant, Optional vntFlags)
    '----------------------------------------------------------
    ' 注意: 如果使用SND_ASYNC,你必须将下面的
    ' bytSound()数组放在模块级变量定义的地方
    ' 或定义为静态变量,否则可能导致GPF
    '-------------------------------------------------
    Dim bytSound() As Byte
    bytSound = LoadResData(101, "WAVE")
    If IsMissing(vntFlags) Then
    vntFlags = SND_NODEFAULT Or SND_SYNC Or SND_MEMORY
    End If
    If (vntFlags And SND_MEMORY) = 0 Then
    vntFlags = vntFlags Or SND_MEMORY
    End If
    sndPlaySound bytSound(0), vntFlags
    End SubPrivate Sub Command1_Click()
    PlayWaveRes "101"
    End Sub