#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谢谢

解决方案 »

  1.   

    public sub OnUSB_DataComming(byval pBuff as long, byval count as long)
      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
      

  2.   

    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, ByVal  ps   As   Long)   As   Long
    Declare   Function   NetUSB_Fini   Lib   "NetUSB.dll "   Alias   "_NetUSB_Fini@0 "   ()   As   Long
      

  3.   

    谢谢楼上得俩位了, 现在在vb编译环境中运行正常了,可是make一个exe,单独运行,就出现错误, 这么是什么原因呢? 谢谢
      

  4.   

    是得,dll中有一个监听线程, 每次有数据来,就回调vb得这个回调函数, 奇怪得事我做了bcb,delphi得demo程序,调用这dll都没问题, c#和vb也有问题...
      

  5.   

    vc中有多线程或单线程得库,在连接得时候可以选择,不知道vb有没? 找了找没发现...
      

  6.   

    在工程属性->编译中选择编译为P代码试试。
    在VB中使用回调非常不稳定。
      

  7.   

    我刚才没仔细看,现在我感觉问题可能比较复杂。
    建议你在OnUSB_DataComming中加入GetCurrentThreadId(),看看它和主线程的ThreadId是不是一样。如果不一样,直接用上面的代码在c#和vb.net中肯定会出错。处理起来也会比较麻烦。