dll说明:void __stdcall SetRecDataProc(void ** Proc) 参数入口:
Proc:指向数据接收函数的指针的指针(二级指针),其函数据参数列表如下所示:
void __stdcall (*RecItemProc)(double Force,double Displacement,double Extend);
返回值:无返回值。
函数功能:设置一个回调函数,当接收到试验机的数据时,调用此函数,传送力值、位移与变形给客户程序。
在VB模块中声明:
Public Declare Sub SetRecDataProc Lib "RFComm32.dll" (ByRef lpProc As Long)
Public fff as DoublePublic Sub RecItemProc(ByVal Force As Double, ByVal Displacement As Double, ByVal Extend As Double)
fff = Force
End Sub在窗体代码中调用:Function GetFuncPtr(ByVal Ptr As Long) As Long
GetFuncPtr = Ptr
End FunctionPrivate Sub Command1_Click()
SetRecDataProc GetFuncPtr(AddressOf RecItemProc)
Debug.Print fff
End Sub得到的fff值为0但是用DELPHI的DEMO是可以取到非0值的。哪位高手有什么好的办法能够取到Force的值?万分感谢!
Proc:指向数据接收函数的指针的指针(二级指针),其函数据参数列表如下所示:
void __stdcall (*RecItemProc)(double Force,double Displacement,double Extend);
返回值:无返回值。
函数功能:设置一个回调函数,当接收到试验机的数据时,调用此函数,传送力值、位移与变形给客户程序。
在VB模块中声明:
Public Declare Sub SetRecDataProc Lib "RFComm32.dll" (ByRef lpProc As Long)
Public fff as DoublePublic Sub RecItemProc(ByVal Force As Double, ByVal Displacement As Double, ByVal Extend As Double)
fff = Force
End Sub在窗体代码中调用:Function GetFuncPtr(ByVal Ptr As Long) As Long
GetFuncPtr = Ptr
End FunctionPrivate Sub Command1_Click()
SetRecDataProc GetFuncPtr(AddressOf RecItemProc)
Debug.Print fff
End Sub得到的fff值为0但是用DELPHI的DEMO是可以取到非0值的。哪位高手有什么好的办法能够取到Force的值?万分感谢!
你 Command1_Click() 的时候,能满足“接收到试验机的数据”吗?
你的程序运行的时候,是不是能加载 RFComm32.dll ,并在另一个线程中进行数据采样?
2)AddressOf 只是一级指针,5楼给出了传二级指针的方法,不过指向临时变量的指针不保险。
'在VB模块中声明:
Public Declare Sub SetRecDataProc Lib "RFComm32.dll" (ByRef lppProc As Long)
Public fff as Double
Public lpProc As LongPublic Sub RecItemProc(ByVal Force As Double, ByVal Displacement As Double, ByVal Extend As Double)
fff = Force
Debug.Print fff
End Sub
'在窗体代码中调用:Function GetFuncPtr(ByVal Ptr As Long) As Long
GetFuncPtr = Ptr
End FunctionPrivate Sub Command1_Click()
lpProc = GetFuncPtr(AddressOf RecItemProc)
SetRecDataProc VarPtr(lpProc)
End Sub
..............................
GetFuncPtr = Ptr
End FunctionPrivate Sub Command1_Click()
lpProc = GetFuncPtr(AddressOf RecItemProc)
SetRecDataProc VarPtr(lpProc)
End Sub两头大牛,都在顺便问一下。用
lpProc = Val(AddressOf RecItemProc)
替代
lpProc = GetFuncPtr(AddressOf RecItemProc)这样少了一个GetFuncPtr函数 是否会快速,简洁一些?
至于简洁性,看个人风格了。
你 Command1_Click() 的时候,能满足“接收到试验机的数据”吗?
你的程序运行的时候,是不是能加载 RFComm32.dll ,并在另一个线程中进行数据采样?可以保证在程序运行的时候,已经加载了 RFComm32.dll ,因为我在调用其他的控制方法的时候都是可以控制试验机的数据变化。明天到现场用6楼的方式测试一下,谢谢!