在VB中如何声明和调用DLL中的二级指针?

oxfordxyc 2010-04-04 09:46:00

在VB中如何声明和调用DLL中的二级指针?

/////////////////////////////////////////////////////////////////////////////
RFComm32.dll

void __stdcall SetRecDataProc(void ** Proc)

参数入口:
Proc:指向数据接收函数的指针的指针(二级指针),其函数据参数列表如下所示:
void __stdcall (*RecItemProc)(double Force,double Displacement,double Extend);
Force指力值,Displacement指位移,Extend指变形。
返回值:无返回值。
函数功能:设置一个回调函数,当接收到试验机的数据时,调用此函数,传送力值、位移与变形给客户程序。
////////////////////////////////////////////////////////////////////////////////

我需要用VB调用DLL取得 Force ,请各位大虾帮忙,万分感谢!
...全文
195 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oxfordxyc 2010-07-16
  • 打赏
  • 举报
回复
Public Declare Sub RecItemProc Lib "RFComm32.dll" (ByVal Force As Double, ByVal Displacement As Double, ByVal Extend As Double)

这个声明有问题
要按照老马的这种方法才不会报AddressOf 调用无效的错误
oxfordxyc 2010-07-16
  • 打赏
  • 举报
回复
还是取不到Force的值啊
嗷嗷叫的老马 2010-04-05
  • 打赏
  • 举报
回复
我觉得.....既然是回调,则是DLL里调用传入的函数.

那么RecItemProc应该是外部的函数,类似SetTimer的回调一样,Public Declare Sub RecItemProc Lib "RFComm32.dll这一个声明不需要.

如果是这样,则试试如下方案:

'标准模块内
public sub RecItemProc(ByVal Force As Double, ByVal Displacement As Double, ByVal Extend As Double)
debug.print Force, Displacement , Extend
end sub

调用时与老陈一样,试一下吧.
oxfordxyc 2010-04-05
  • 打赏
  • 举报
回复
谢谢东方之珠,我试试。
舉杯邀明月 2010-04-04
  • 打赏
  • 举报
回复
顶东方之珠……
东方之珠 2010-04-04
  • 打赏
  • 举报
回复
标准模块中声明如下:
Public Declare Sub SetRecDataProc Lib "RFComm32.dll" (ByRef lpProc As Long)
Public Declare Sub RecItemProc Lib "RFComm32.dll" (ByVal Force As Double, ByVal Displacement As Double, ByVal Extend As Double)

调用方法如下:
Call SetRecDataProc(AddressOf RecItemProc)

不知是否可行,能否取得相关的值。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧