当前位置:编程学习 > C#/ASP.NET >>

vb.net调用C++中回调函数问题

C++中源码:

//Sa7134Capture.dll中函数
//视频MPEG压缩数据回调
typedef void (CALLBACK *PrcVidMpegCallBack)( DWORD dwCard, BYTE *pbuff, DWORD dwSize, BOOL isKeyFrm );
//注册视频MPEG压缩数据回调
BOOL  WINAPI VCARegVidMpegCallBack( DWORD dwCard, PrcVidMpegCallBack ppCall );


//MediaTransmit.dll中函数
MEDIATRANSMIT_API BOOL MTAWriteVideo(BYTE  nCardNo, BYTE *pData, LONG  lSize,   BOOL  bIFrm);
//nCardNo:     卡号,编号以0为基数,0-第一块卡,1-第二块卡,依次类推。
//pData:         视频数据的缓冲区指针。
//lSize:           视频数据大小。
//bIFrm:         是否I帧。


我的方案是这样的(vb.net):

Delegate Sub myDelegate(ByVal dwCard As UInteger, ByRef pbuff As Byte, ByVal dwSize As UInteger, ByVal isKeyFrm As Boolean)
Declare Function VCARegVidMpegCallBack Lib "Sa7134Capture.dll" (ByVal dwCard As UInteger, ByVal ppCall As myDelegate) As Boolean
Sub PrcVidMpegCallBack(ByVal dwCard As UInteger, ByRef pbuff As Byte, ByVal dwSize As UInteger, ByVal isKeyFrm As Boolean)
    MTAWriteVideo(dwCard, pbuff, dwSize, isKeyFrm)
End Sub
Declare Sub MTAWriteVideo Lib "MediaTransmit.dll" _
    (ByVal nCardNo As Byte, ByRef pData As Byte, ByVal lSize As Integer, ByVal bIFrm As Boolean)

VCARegVidMpegCallBack(1, AddressOf PrcVidMpegCallBack)

我的理解是:当我调用了dll中的VCARegVidMpegCallBack函数后,dll会将参数传递给ppCall,也就是PrcVidMpegCallBack函数,然后执行我写的PrcVidMpegCallBack里面的内容。
相当于我调用VCARegVidMpegCallBack后,在VCARegVidMpegCallBack执行的过程中,它调用了我的函数PrcVidMpegCallBack,传入参数是dwCard,pbuff,dwSize,isKeyFrm,然后开始执行我编的PrcVidMpegCallBack函数,执行MTAWriteVideo。
第一次接触回调函数,不知道是不是我理解的这个样子的?但好像MTAWriteVideo功能没有实现,这是为什么啊? callback c++ 指针 --------------------编程问答-------------------- 自己顶一下,希望有人回答!!! --------------------编程问答-------------------- 除
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,