设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3249|回复: 1
打印 上一主题 下一主题

BRAC_EnumAudioCapture VB.NET 调用多个设备异常

[复制链接]

3

主题

13

帖子

57

积分

注册会员

Rank: 2

积分
57
跳转到指定楼层
楼主
发表于 2013-12-12 15:15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

BRAC_EnumAudioCapture
BRAC_EnumVideoCapture
这2个函数是一样的接口类型, 分别是枚举音频设备和视频设备的, 在每个多个设备情况下, BRAC_EnumVideoCapture视频多个设备没问题,但是BRAC_EnumAudioCapture多个音频设备时或出现IndexOutOfRangeException的异常(索引超出了数组界限). 使用的是vb.net 2008进行调用.

        Dim maxDeviceNum As Integer = 10
        Dim DeviceNameArray(maxDeviceNum - 1) As IntPtr
        BRAC_EnumAudioCapture(DeviceNameArray(0), maxDeviceNum)
        Dim i As Integer = 0
        Do While (i < maxDeviceNum)
            Dim tBytes As Byte()
            Dim j As Integer = 0
            While (Marshal.ReadByte(DeviceNameArray(i), j) <> 0)
                ReDim Preserve tBytes(j)
                tBytes(j) = Marshal.ReadByte(DeviceNameArray(i), j)
                j += 1
            End While
            Dim DeivceName As String = Encoding.Default.GetString(tBytes)

            Marshal.FreeHGlobal(DeviceNameArray(i))
            i = i + 1
        Loop

    经过仔细比对发现原来是给的DEMO里面的函数声明出了问题

'注意:这里将CHAR**类型的参数lpDeviceName定义为引用传递的IntPtr类型,请注意这里传递回来的CHAR*指针所指缓冲区为函数在内部所分配,应注意手工释放该缓冲区,具体请参见相应SDK文档
    '// 枚举本地音频采集设备
    'BRAC_API DWORD BRAC_EnumAudioCapture(CHAR** lpDeviceName, DWORD& dwDeviceNum);
    <DllImport(AnyChatSDKDLL, EntryPoint:="BRAC_EnumAudioCapture", CallingConvention:=CallingConvention.Cdecl)> _
    Function BRAC_EnumAudioCapture(ByRef lpDeviceName As Integer, ByRef dwDeviceNum As Integer) As Integer
    End Function

'注意:这里将CHAR**类型的参数lpDeviceName定义为引用传递的IntPtr类型,请注意这里传递回来的CHAR*指针所指缓冲区为函数在内部所分配,应注意手工释放该缓冲区,具体请参见相应SDK文档
    '// 枚举本地视频采集设备
    'BRAC_API DWORD BRAC_EnumVideoCapture(CHAR** lpDeviceName, DWORD& dwDeviceNum);
    <DllImport(AnyChatSDKDLL, EntryPoint:="BRAC_EnumVideoCapture", CallingConvention:=CallingConvention.Cdecl)> _
    Function BRAC_EnumVideoCapture(ByRef lpDeviceName As IntPtr, ByRef dwDeviceNum As Integer) As Integer
    End Function

第一个参数的问题, 视频接口里面声明的是IntPtr 而 音频接口里面声明的是Integer类型.

所以, 恩, 修改一下吧.



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

249

主题

2967

帖子

9075

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9075
沙发
发表于 2013-12-12 15:39:04 | 只看该作者
非常感谢您的提醒,我们会将您的建议反馈给研发团队,谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-4-25 11:40 , Processed in 0.119598 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表