关于VB调用VC++的DLL的问题...

埃和智能 2008-04-13 10:13:48
以下是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);
...全文
172 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Suese 2008-04-14
  • 打赏
  • 举报
回复
我是菜鸟,不过最近刚发现,vb调用vc需要在vc里面定义如
int _stdcall hello(……){……}

vb声明我是用的
Public Declare Sub hello Lib "test.dll" (……)
test.dll要放到system32下或者当前目录下,某人告诉我说放在当前目录是中不好的做法,具体的我没听明白,我的那个程序就是放在当前目录读取图片老是出问题,搞得我只好给出完整地址,反正是测试,也没考虑移植啊什么的
埃和智能 2008-04-14
  • 打赏
  • 举报
回复
衷心感谢以上热心的朋友的帮助!
我也觉得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)

......

要会两种语言就好了,可惜精力有限啊,恳请高手帮助,谢谢!
用户 昵称 2008-04-13
  • 打赏
  • 举报
回复
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,括号也不匹配

supergreenbean 2008-04-13
  • 打赏
  • 举报
回复
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
用户 昵称 2008-04-13
  • 打赏
  • 举报
回复

'没经过测试
'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的声明不太对劲

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧