以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]API调用的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=80061) |
-- 作者:chnfo -- 发布时间:2016/1/15 11:22:00 -- [求助]API调用的问题 有一个外部的第三方标准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 -- 发布时间: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 -- 发布时间:2016/1/15 12:37:00 -- pid: [in]产品标识, 为固定长度8个字节的字符串; count:[out]返回的设备个数; Hyphen的方式不行哟。 函数定义里提示错误: 编译错误:无法加载引用的库“C:\\foxtable\\开发版\\外部API.dll”: 试图加载格式不正确的程序 |
-- 作者:chnfo -- 发布时间:2016/1/15 14:07:00 -- 第三方标准dll的接口说明是这么写的: BS_FT( unsigned char* pid, int * count ) 功能说明: 查找计算机上指定pid的BS个数。 参数: pid: [in]产品标识, 为固定长度16个字节的字符串; count:[out]还回的设备个数; 返回值: BSY:执行成功,Count为查找到的ET的数目。 BSN:没有可以用的硬件,此时Count值为0。 |
-- 作者:Hyphen -- 发布时间:2016/1/15 14:30:00 -- dll不要引用,放到“C:\\foxtable\\开发版”里面就可以,2楼的方法应该可以, 接口有没有。net的例子,看看别人怎么定义的
|
-- 作者:chnfo -- 发布时间:2016/1/15 14:54:00 -- 编译错误:无法加载引用的库“C:\\foxtable\\开发版\\外部API.dll”: 试图加载格式不正确的程序。 |
-- 作者:狐狸爸爸 -- 发布时间:2016/1/15 14:56:00 -- 帮助告诉你不要引用。 5楼也告诉你不要引用。 你为什么还要引用呢?
|
-- 作者:chnfo -- 发布时间: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 -- 发布时间:2016/1/15 15:49:00 -- 成功提交不代表定义值正确的 不行再试下面: 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 -- 发布时间: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编辑过]
|