#ifdef __cplusplus
extern "C" {
#endif //typedef void __stdcall* NETUSB_PFUNC) (unsigned char* buff, size_t n);// 设置回调函数(数据接收)
_declspec(dllexport)
void DLL_CALLCONV NetUSB_SetCallback(NETUSB_PFUNC pFunc);_declspec(dllexport)
int DLL_CALLCONV NetUSB_Init(HANDLE handle,int ps=28);#ifdef __cplusplus
}
#endif //
在vb中,
Declare Sub NetUSB_SetCallback Lib "NetUSB.dll" Alias "_NetUSB_SetCallback@4" (ByVal callback As Long)
Declare Function NetUSB_Init Lib "NetUSB.dll" Alias "_NetUSB_Init@8" (ByVal hwnd As Long, ps As Integer) As Integer
Declare Function NetUSB_Fini Lib "NetUSB.dll" Alias "_NetUSB_Fini@0" () As Integer问体是,我得一个回调函数如下,OnUSB_DataComming, 不知道str要用long还是string,都试过还是不行, ByVal也是过,不知道问题解决,请大家给点指点,不知道这个回调函数在vb中怎么写,把函数指针设置到dll中去,(dll在vc,Delphi中都通过测试, )在c++中,回调函数得第一个参数unsigned char* buff,是得到得一块二进制数据首地址,
Public Sub setcallbackproc1()
Call NetUSB_SetCallback(AddressOf OnUSB_DataComming)
End SubPublic Sub OnUSB_DataComming(ByRef str As String, ByVal count As Integer)
Dim i, m As Integer
Dim s As String: s = ""
For i = 1 To count
m = Val(Mid(str, i, 1))
s = s + Hex(m) + " "
Next i
Form1.RichTextBox1.Text = Form1.RichTextBox1.Text + s
End Sub谢谢
dim a() as byte, i as long, s as string
redim a(count-1)
copymemory a(0), byval pBuff, count
for i=0 to count-1
s = s & hex(a(i)) & " " '连接字符串要用 &
next
Form1.RichTextBox1.Text = Form1.RichTextBox1.Text & s
end sub
Declare Function NetUSB_Init Lib "NetUSB.dll " Alias "_NetUSB_Init@8 " (ByVal hwnd As Long, ByVal ps As Long) As Long
Declare Function NetUSB_Fini Lib "NetUSB.dll " Alias "_NetUSB_Fini@0 " () As Long
在VB中使用回调非常不稳定。
建议你在OnUSB_DataComming中加入GetCurrentThreadId(),看看它和主线程的ThreadId是不是一样。如果不一样,直接用上面的代码在c#和vb.net中肯定会出错。处理起来也会比较麻烦。