| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7611 人关注过本帖
标题:VB如何调用.DLL文件里的函数?
只看楼主 加入收藏
Jacob01
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-31
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:12 
VB如何调用.DLL文件里的函数?
VB如何调用.DLL文件里的函数?各位高手帮帮忙。
比如有一个.DLL文件,同时有一个.BAS文件给出.DLL文件里的函数定义,怎么调用里面的函数?
最好有具体的例子,谢谢各位啊!
部分.BAS里定义的函数:
Public Declare Function GT_Axis Lib "gt400.dll" (ByVal axis As Integer) As Integer
Public Declare Function GT_AxisOff Lib "gt400.dll" () As Integer
Public Declare Function GT_AxisOn Lib "gt400.dll" () As Integer
Public Declare Function GT_BrkOff Lib "gt400.dll" () As Integer
Public Declare Function GT_CaptHome Lib "gt400.dll" () As Integer
 
搜索更多相关主题的帖子: 如何 最好 
2011-09-08 10:05
Jacob01
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-31
收藏
得分:0 
这是一个C语言的例子,有谁能编译成VB语言的吗?

本例程实现第一轴以速度 1(Pulse/ST)运动到为20000 后,改变速度为4(Pulse/ST)运
动到位置50000。
void main()
{
GTInitial();
InputCfg();
AxisInitial();
rtn=GT_Axis(1); error(rtn); //设置当前轴为第1 轴
rtn=GT_ClrSts(); error(rtn); //清除状态位
rtn=GT_SetVel(1); error(rtn); //设置速度为1(Pulse/ST)
rtn=GT_SetAcc(0.1); error(rtn); //设置加速度为0.1(Pulse/ST2)
rtn=GT_SetPos(50000); error(rtn); //设定目标位置为50000
rtn=GT_AuUpdtOn(); error(rtn); // 打开断点参数自动刷新功能
rtn=GT_SetBrkCn(20000); error(rtn); //设置断点位置
rtn=GT_Update(); error(rtn); //刷新参数(断点位置生效)
rtn=GT_PosBrk(); error(rtn); //设置条件为大于断点位置
rtn=GT_SetVel(4); error(rtn); //设置速度为4(等待自动刷新)
}
2011-09-08 10:05
weizan
Rank: 2
等 级:论坛游民
帖 子:6
专家分:25
注 册:2011-9-5
收藏
得分:0 
把那个DLL放到你工程的文件夹下,在工程中添加那个.bas模块就可以直接把那些函数拿过来用了啊....
貌似在做运动控制,我正好也在做,不知你用的什么卡?一般厂商会给你示例的啊...
2011-09-08 10:21
Jacob01
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-31
收藏
得分:0 
我用的是固高的GT400系列的卡,他们给的示例是C语言的,正在问他们要VB示例
2011-09-08 10:30
Jacob01
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-31
收藏
得分:0 
能举个例子说明下吗,我把函数调来用,可是电机怎么都没反应,不会动
2011-09-08 10:46
Jacob01
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-31
收藏
得分:0 
我把DLL文件放到工程文件夹下了,也添加了.BAS文件,从但是调用函数的时候显示“Argument not optional!”错误,用不了,这是怎么回事?
2011-09-09 10:43
weizan
Rank: 2
等 级:论坛游民
帖 子:6
专家分:25
注 册:2011-9-5
收藏
得分:20 
回复 2楼 Jacob01
你用这个C语言的例子能动么?确认不是硬件(卡本身/驱动/接线等)问题先.
如果可以动,你就按照这个示例写个过程看看。
Sub Test()
Dim Ret As Integer
    '下面这3个过程对应到.bas模块里面去找
    GTInitial();        '应该是卡的初始化,一般都应该有返回值才对,单步看看有没有返回值,确保控制卡能工作
    InputCfg();         '这个看函数名可能是一些配置参数
    AxisInitial();      '这个可能是运动轴初始化
    Ret=GT_Axis(1)      '下面这些函数就是运动控制了,函数名在DLL中应该是一样的,也可以对照.bas比较一下
    If Ret Then
        '加上你的出错处理
    End If
    Ret=GT_ClrSts()
    If Ret Then
        '加上你的出错处理
    End If
    ...
    ...
    ...
    Ret=GT_SetVel(4)
    If Ret Then
        '加上你的出错处理
    End If
End Sub

这卡没用过,不了解,你试试看.一般步骤都是卡的初始化(程序开始时只做一次)->一些模式设置->运动函数调用-><-状态检测->...
2011-09-09 10:56
weizan
Rank: 2
等 级:论坛游民
帖 子:6
专家分:25
注 册:2011-9-5
收藏
得分:5 
回复 6楼 Jacob01
那是说你参数不可选,你看看你调用函数的时候给的参数是否和声明里的一致!!
2011-09-09 11:00
Jacob01
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-8-31
收藏
得分:0 
我把DLL文件放到工程文件夹下了,也添加了.BAS文件,从但是调用函数的时候显示“Argument not optional!”错误,用不了,这是怎么回事?
2011-09-09 12:58
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:5 
你会 谷歌 翻译吗?


是 49 号错误吗??

DLL 的调用约定错误(错误 49)

传送给动态链接库 (DLL)的参数必须符合例程的需要。调用约定要检查个数、类型、参数的顺序等。此错误有以下的原因和解决方法:

程序调用被传递了错误的参数类型的 DLL中的例程时。
确保所有的参数的类型和调用的例程中指定的声明符合。

程序调用被传递了错误的参数数目的 DLL中的例程时。
请确保参数数目和所调用的例程的声明符合。

程序调用 DLL 的例程,但没有使用 StdCall 调用约定。
如果 DLL 例程需要的是按值参数,那么请在例程的声明中确保这些参数是以 ByVal 进行了声明。

对于Windows DLL的Declare 语句包括了 CDecl。
详细信息,可选取有问题的项目,并按下 F1 键。

授人于鱼,不如授人于渔
早已停用QQ了
2011-09-09 16:27
快速回复:VB如何调用.DLL文件里的函数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026148 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved