以下是VC++写的DLL函数原形,要在VB中调用这个DLL,应该怎么写声明模块?急呀! void NET_DVR_ReleaseG722Encoder(void *pEncodeHandle); LONG NET_DVR_StartVoiceCom_MR(LONG lUserID, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle,char *pRecvDataBuffer,DWORD    )dwBufSize,BYTE byAudioFlag,DWORD dwUser), DWORD dwUser);

解决方案 »

  1.   


    '没经过测试
    'vb声明
    Private Declare Sub NET_DVR_ReleaseG722Encoder Lib "xxx.dll" (pEncodeHandle() As Byte)'vb调用
    dim aaa(0 to xxxx) as byte
    NET_DVR_ReleaseG722Encoder( aaa(0) )'第二个好像c的声明不太对劲
      

  2.   

    void NET_DVR_ReleaseG722Encoder(void *pEncodeHandle);  
    declare sub NET_DVR_ReleaseG722Encoder lib "xx.dll" (byval pEncodeHandle as long)LONG NET_DVR_StartVoiceCom_MR(LONG lUserID, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle,char *pRecvDataBuffer,DWORD dwBufSize ,BYTE byAudioFlag,DWORD dwUser), DWORD dwUser);
    declare function NET_DVR_StartVoiceCom_MR lib "xx.dll" (byval lUserID as long ,byval fVoiceDataCallBack as long ,byval dwUser as long ) as long
     void(CALLBACK *fVoiceDataCallBack))(LONG lVoiceComHandle,char *pRecvDataBuffer,DWORD dwBufSize ,BYTE byAudioFlag,DWORD dwUser)public sub VoiceDataCallBack(byval lVoiceComHandle as long,byval pRecvDataBuffer as string, byval dwBufSize as long,byval byAudioFlag as byte,byval dwUser as long)end sub
      

  3.   

    LONG NET_DVR_StartVoiceCom_MR(LONG lUserID, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle,char *pRecvDataBuffer,DWORD    )dwBufSize,BYTE byAudioFlag,DWORD dwUser), DWORD dwUser);
    这个声明中 LONG lUserID,对应vb中的byval lUserId as long
    void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle,char *pRecvDataBuffer,DWORD    ),对应vb中的byval fVoiceDataCallBack as long
    可是后面又接了一个dwBuffersize,括号也不匹配
      

  4.   

    衷心感谢以上热心的朋友的帮助!
    我也觉得VC++的代码里的括号不匹配,可确实是这样的,类式的函数还有很多如下:LONG NET_DVR_StartVoiceCom(LONG lUserID, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle,char *pRecvDataBuffer,DWORD dwBufSize,BYTE byAudioFlag,DWORD dwUser), DWORD dwUser)BOOL NET_DVR_SetPlayDataCallBack(LONG lPlayHandle,void(CALLBACK *fPlayDataCallBack) (LONG lPlayHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser)......要会两种语言就好了,可惜精力有限啊,恳请高手帮助,谢谢!
      

  5.   

    我是菜鸟,不过最近刚发现,vb调用vc需要在vc里面定义如
    int _stdcall hello(……){……}vb声明我是用的
    Public Declare Sub hello Lib "test.dll" (……)
    test.dll要放到system32下或者当前目录下,某人告诉我说放在当前目录是中不好的做法,具体的我没听明白,我的那个程序就是放在当前目录读取图片老是出问题,搞得我只好给出完整地址,反正是测试,也没考虑移植啊什么的