以下是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);
'没经过测试
'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的声明不太对劲
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
这个声明中 LONG lUserID,对应vb中的byval lUserId as long
void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle,char *pRecvDataBuffer,DWORD ),对应vb中的byval fVoiceDataCallBack as long
可是后面又接了一个dwBuffersize,括号也不匹配
我也觉得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)......要会两种语言就好了,可惜精力有限啊,恳请高手帮助,谢谢!
int _stdcall hello(……){……}vb声明我是用的
Public Declare Sub hello Lib "test.dll" (……)
test.dll要放到system32下或者当前目录下,某人告诉我说放在当前目录是中不好的做法,具体的我没听明白,我的那个程序就是放在当前目录读取图片老是出问题,搞得我只好给出完整地址,反正是测试,也没考虑移植啊什么的