Foxtable(狐表)用户栏目专家坐堂 → [求助]API调用的问题


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

主题:[求助]API调用的问题

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


加好友 发短信
等级:九尾狐 帖子:2240 积分:18457 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]API调用的问题  发帖心情 Post By:2016/1/15 11:22:00 [只看该作者]

有一个外部的第三方标准dll。里面有一个函数接口是这样定义的。

BS_FT(

unsigned char* pid,

int * count

)


pid:    [in]产品标识, 为固定长度8个字节的字符串;

count[out]返回的设备个数;


我要怎么样调用它呢?要用什么样的步骤?


帮助文档里有一个调用第三方的东东,但套用过去,提示错误


我是这样操作的

1、把第三方标准dll在管理项目-外部引用中添加到foxtable的安装目录下

2、在全局代码中定义Public Declare Function BS_FT Lib "外部API.dll" Alias "BS_FT" (ByVal PID As string) As Integer '连接设备

3、在命令窗口中执行

Dim iRetUSB As Integer = BS_FT("ASDFGHJK")


If iRetUSB = 1 Then

    MessageBox.Show("设备连接成功")

Else

    MessageBox.Show("设备连接失败")

End If


结果报错了

[此贴子已经被作者于2016/1/15 13:52:29编辑过]

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/1/15 11:47:00 [只看该作者]

函数定义试试
Public Declare Function BS_FT Lib "外部API.dll" (ByVal pid$ ,ByRef count As Byte) 

Count是指针,需要定义字节数组进行接收, 具体还要看接口文档才知道
Dim ret(4) As Byte
BS_FT("ASDFGHJK",ret(0))

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


加好友 发短信
等级:九尾狐 帖子:2240 积分:18457 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/1/15 12:37:00 [只看该作者]

pid:    [in]产品标识为固定长度8个字节的字符串;

count[out]返回的设备个数;


Hyphen的方式不行哟。

函数定义里提示错误:

编译错误:无法加载引用的库“C:\foxtable\开发版\外部API.dll: 试图加载格式不正确的程序



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


加好友 发短信
等级:九尾狐 帖子:2240 积分:18457 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/1/15 14:07:00 [只看该作者]

第三方标准dll的接口说明是这么写的:

BS_FT(

unsigned char* pid,

int * count

)

功能说明:

查找计算机上指定pidBS个数。

参数:

pid:    [in]产品标识, 为固定长度16个字节的字符串;

count[out]还回的设备个数;

返回值:

BSY:执行成功,Count为查找到的ET的数目。

BSN:没有可以用的硬件,此时Count值为0


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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/1/15 14:30:00 [只看该作者]

dll不要引用,放到“C:\foxtable\开发版”里面就可以,2楼的方法应该可以,

接口有没有。net的例子,看看别人怎么定义的

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


加好友 发短信
等级:九尾狐 帖子:2240 积分:18457 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/1/15 14:54:00 [只看该作者]

编译错误:无法加载引用的库“C:\foxtable\开发版\外部API.dll”: 试图加载格式不正确的程序。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/1/15 14:56:00 [只看该作者]

帮助告诉你不要引用。
5楼也告诉你不要引用。
你为什么还要引用呢?

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


加好友 发短信
等级:九尾狐 帖子:2240 积分:18457 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/1/15 15:25:00 [只看该作者]

1、现在我已经去掉了引用。直接把dll复制到了foxtable的安装目录下。
2、在全局代码中做了这个定义
Public Declare Function BS_FT Lib “第三方API.dll" Alias "BS_FT" ( ByVal pid As String , ByVal count As Integer ) As Integer  ‘这个成功提交了
3、新建一个窗口,一个按钮,一个文本框。按钮事件如下

Dim retcode As integer

Dim IPID As String

Dim IPCount As Integer

 

retcode = BS_FT(IPID, IPCount)

If (retcode <> 0) Then

    e.Form.Controls("TextBox1").text = "找到了"

Else

    e.Form.Controls("TextBox1").text = "失败"

End If



结果提示下面的内容:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

这是为何?
[此贴子已经被作者于2016/1/15 15:26:07编辑过]

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/1/15 15:49:00 [只看该作者]

成功提交不代表定义值正确的

Public Declare Function BS_FT Lib “第三方API.dll" Alias "BS_FT" ( ByVal pid As String , ByRef count As Integer ) As Integer

不行再试下面:

Public Declare Function BS_FT Lib “第三方API.dll" Alias "BS_FT" ( ByVal pid As String , ByRef count As byte) As Integer
Dim IPCount(16) As Byte
dim retcode = BS_FT("ASDFGHJK", IPCount(0))

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


加好友 发短信
等级:九尾狐 帖子:2240 积分:18457 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/1/15 16:12:00 [只看该作者]

唉,还是不行呀。
直接在命令窗口执行以下

Public Declare Function BS_FT  Lib "ABC_API.dll" Alias "BS_FT " ( ByVal pid As String , byref count As Byte) As Integer  ‘不论是ByVal还是Byref都不行’
Dim retcode As Integer = BS_FT("6B55003D", 0)
Output.Show(retcode )

提示错误是:
编译错误:关键字作为标识符无效    难道count是关键字?
[此贴子已经被作者于2016/1/15 16:14:13编辑过]

 回到顶部
总数 36 1 2 3 4 下一页