Foxtable(狐表)用户栏目专家坐堂 → [求助]帮我看看这个dll调用失败是哪里错了


  共有1989人关注过本帖树形打印复制链接

主题:[求助]帮我看看这个dll调用失败是哪里错了

帅哥哟,离线,有人找我吗?
jolay0827
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:463 威望:0 精华:0 注册:2017/2/28 8:50:00
[求助]帮我看看这个dll调用失败是哪里错了  发帖心情 Post By:2017/3/1 10:45:00 [显示全部帖子]

1、VB下的函数调用声明
 
Private Declare Function mbtcpConnect Lib "modbus_tcp.dll" (ByVal nport As Long, ByVal IpPort As Long, ByVal IpAddress As String, ByVal User As String) As Long
 
调用举例: k = mbtcpConnect(0, 502, "85.16.1.1", "wjun")  '启动0号网络链接,从IP地址85.16.1.1,网络端口502的设备进行通讯     这里是帮助文档里的VB调用说明 



Declare Function mbtcpConnect Lib "modbus_tcp.dll" (ByVal nport As Long, ByVal IpPort As Long, ByVal IpAddress As String, ByVal User As String) As Long   这个是写在fox全局代码里面的



图片点击可在新窗口打开查看mbtcpConnect(0, 502, "85.16.1.1", "wjun")    这个代码是打开端口,我用按键触发这条指令就会出现图片上的错误提示,但是我另外一个自己编写的dll调用可以成功,请教大神指点。
图片点击可在新窗口打开查看此主题相关图片如下:dll调用失败提示.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
jolay0827
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:463 威望:0 精华:0 注册:2017/2/28 8:50:00
  发帖心情 Post By:2017/3/1 10:48:00 [显示全部帖子]

0.0.0

 回到顶部
帅哥哟,离线,有人找我吗?
jolay0827
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:463 威望:0 精华:0 注册:2017/2/28 8:50:00
  发帖心情 Post By:2017/3/1 11:33:00 [显示全部帖子]

还是存在那个错误,还有我是否需要添加这个dll,按照帮助文件里面介绍,我是不要添加的。

 回到顶部
帅哥哟,离线,有人找我吗?
jolay0827
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:463 威望:0 精华:0 注册:2017/2/28 8:50:00
  发帖心情 Post By:2017/3/1 12:41:00 [显示全部帖子]

易语言调用过,
而且我用易语言写了一个dll在fox里调用成功了,不过调用这个modbus的dll文件就不行。

 回到顶部
帅哥哟,离线,有人找我吗?
jolay0827
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:463 威望:0 精华:0 注册:2017/2/28 8:50:00
  发帖心情 Post By:2017/3/1 16:18:00 [显示全部帖子]

试了下,不过又出现了新的情况,提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”



 回到顶部
帅哥哟,离线,有人找我吗?
jolay0827
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:463 威望:0 精华:0 注册:2017/2/28 8:50:00
  发帖心情 Post By:2017/3/1 17:47:00 [显示全部帖子]

是不是我引用变量的时候路径定义错了,不过我按照网上说的那个关掉DEP也不行呀,而且只有12版本的可以关,16版本的还关不掉…………

 回到顶部
帅哥哟,离线,有人找我吗?
jolay0827
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:463 威望:0 精华:0 注册:2017/2/28 8:50:00
  发帖心情 Post By:2017/3/2 16:03:00 [显示全部帖子]

谢谢,已经得到解决。

 回到顶部
帅哥哟,离线,有人找我吗?
jolay0827
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:463 威望:0 精华:0 注册:2017/2/28 8:50:00
  发帖心情 Post By:2017/3/2 16:07:00 [显示全部帖子]

function mbtcpfcn03(nport,node,address,Count:LongInt; RxdBuffer:PlongInt):LongInt;stdcall;
 
参数说明
 
    nport: 网络连接号,取值为0~127128个网络链接
 
    node:  从站号或单元标识符,从站时取值为1~255;  
 
    address:  元件地址,modbus标准地址40001~4XXXX地址区,(读取时使用偏移地址传入,地址值从0000开始);
 
    Count:    读元件个数,一次最多读125个,但不能超出寻址范围;
   
    RxdBuffer: 整数指针类型,指向一个定义1024个数的整数数组;单个数组单元值范围为-32768~+32767              
              
返回值:长整型
 
   返回值:操作成功返回:Count,操作失败返回:-1
 
注:非注册用户,可以读取modbus标准地址40001~100088个位地址。
 
1、VB下的函数调用声明
 
Private Declare Function mbtcpfcn03 Lib "modbus_tcp.dll" (ByVal nport As Long, ByVal node As Long, ByVal address As Long, ByVal Count As Long, RxdBuffer As Any) As Long
 
调用举例
   Dim buffer(1024) As Long '定义一个数据接收缓冲区   
   Dim k As Long    
    '通过网络链接0modbus从站号1modbus标准地址40001~4002020个字的数据值读出 
   k = mbtcpfcn03(0, 1, 0, 20,buffer(0))  


RxdBuffer As Any)  还有一个问题,就是这个数据类型我应该如何定义才能在fox里正常使用

 回到顶部