VB调用DLL中的回调函数
DLL中的函数:CPLAYER_APIIMPORT BOOL __stdcall VS_MP4_ClientGetServerFileList(char *m_lAddrIP,char m_cChannel,char m_cType,PTIME_PARA m_pStartTime,PTIME_PARA m_pStopTime,void(WINAPI *FileListCallBack)(char m_cFilename[]),WORD dserverport = 8000);
回调函数:
void WINAPI FileListPlayBack(char filename[])
{
if(strcmp(filename ,"") == 0)
{
AfxMessageBox("获取文件列表结束,文件已经全部列出");
}
else if(strcmp(filename," ") == 0)
AfxMessageBox("由于服务器忙,或网络故障,获取文件列表异常终止");
else
{
RemotePlayDlg.m_filelist.AddString(filename);
}
}
VB调用:
模块:
Type PTIME_PARA
dwYear As Long
dwMonth As Long
dwDay As Long
dwHour As Long
dwMinute As Long
dwSecond As Long
End Type
'CPLAYER_APIIMPORT BOOL __stdcall VS_MP4_ClientGetServerFileList(char *m_lAddrIP,char m_cChannel,char m_cType,PTIME_PARA m_pStartTime,PTIME_PARA m_pStopTime,void(WINAPI *FileListCallBack)(char m_cFilename[]),WORD dserverport = 8000);
Public Declare Function VS_MP4_ClientGetServerFileList Lib "HikMP4Net.dll" (ByVal m_lAddrIP As String, ByVal m_cChannel As String, ByVal m_cType As String, ByRef m_pStartTime As PTIME_PARA, ByRef m_pStopTime As PTIME_PARA, ByVal FileListCallBack As Long, ByVal dserverport As Long) As Boolean
Public Sub FileListPlayBack(ByRef FileName() As String)
Form1.Text1.Text = "1" '这里无论写什么都没有反应,应该不是这里的问题
End Sub
窗体form1:
Dim HaiKangTimeStart As PTIME_PARA '时间,赋值过程就不写了
Dim HaiKangTimeEnd As PTIME_PARA
Private Sub Command1_Click()
Dim ret As Long
ret = VS_MP4_ClientGetServerFileList("IP地址", "1", "4", HaiKangTimeStart, HaiKangTimeEnd, AddressOf FileListPlayBack, 8000)
End Sub
单击command1程序运行没有出错,ret的返回值是0(没有问题),但FileListPlayBack中的程序没有运行,为什么????
我在FileListPlayBack中打了个断点,结果程序就没有运行到这里!
--------------------编程问答-------------------- 把你的FileListPlayBack函数放到模块中看看 --------------------编程问答-------------------- FileListPlayBack函数就是在模块中啊,
要是在窗体里,根本就不能执行,报错! --------------------编程问答-------------------- ByRef FileName() As String
这里应该是 Byte 类型的数据
在C(C++)中 char 类型其实就是 byte 类型数据
还有一点,试试把函数写成带返回类型的试试(Sub 改 Function) --------------------编程问答-------------------- 楼上说的试过了,还是不行 --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 'CPLAYER_APIIMPORT BOOL __stdcall VS_MP4_ClientGetServerFileList(char *m_lAddrIP,char m_cChannel,char m_cType,PTIME_PARA m_pStartTime,PTIME_PARA m_pStopTime,void(WINAPI *FileListCallBack)(char m_cFilename[]),WORD dserverport = 8000);
Public Declare Function VS_MP4_ClientGetServerFileList Lib "HikMP4Net.dll" (ByVal m_lAddrIP As String, ByVal m_cChannel As Byte, ByVal m_cType As Byte, m_pStartTime As PTIME_PARA, m_pStopTime As PTIME_PARA, ByVal FileListCallBack As Long, ByVal dserverport As Integer) As Long
Public Sub FileListPlayBack(ByVal FileName As String)
...
End Sub
--------------------编程问答-------------------- 楼上的方法还是不行 --------------------编程问答-------------------- 是哪里不行呢,根据你的C函数声明,VB的声明就是这样了 --------------------编程问答-------------------- DLL确认没问题么?
补充:VB , API