当前位置:编程学习 > VB >>

还是先前那个数组问题,求大侠解决下

Public Type TMap
  cnt(1 To 5) As Double
End Type

Public Declare Function GT_MapAxis Lib "gt400.dll" (ByVal axis As Integer, map As TMap) As  

Integer
~~~~~~~~模块中的大量声明~~~~
~~~~~~~~~~
~~~~~省略~~~


——————————————————————————————————
坐标映射命令函数原型是:short GT_MapAxis(short Axis_Num, double * map_count)。
Axis_Num 为轴号(1、2、3 或4),调用坐标映射命令以后,该轴工作于坐标运动模式。
该轴的实际位置记为Axis _ N ,单位是脉冲。数组map_count包括五个元素,顺次记为x C 、
y C 、z C 、a C 、C ,坐标轴X、Y、Z、A 所对应的相应坐标记为x 、y 、z 、a 。上述
函数描述的映射关系能够简单地描述成下面的计算公式:

由此可以看出被映射的控制轴的运动是坐标 X、Y、Z、A 的线性组合
案例中使用 VC++6.0


void main()
{
short rtn;
GTInitial();
InputCfg();
AxisInitial();
double cnt1[5]={2000,0,0,0,0}; /* 根据系统设置坐标映射数组 */
double cnt2[5]={0,2000,0,0,0}; /*根据系统设置坐标映射数组 */
double cnt3[5]={0,0,2000,0,0}; /* 根据系统设置坐标映射数组 */
double cnt4[5]={0,0,0,2000,0}; /* 根据系统设置坐标映射数组 */
rtn=GT_MapAxis(1,cnt1); error(rtn); /* 映射第1 轴到X 轴 */
rtn=GT_MapAxis(2,cnt2); error(rtn); /* 映射第2 轴到Y 轴 */
rtn=GT_MapAxis(3,cnt3); error(rtn); /* 映射第3 轴到Z 轴 */
rtn=GT_MapAxis(4,cnt4); error(rtn); /* 映射第4 轴到A 轴 */   
}

——————————————————————————————————————————

我自己在VB 6.0中编译 (选1轴翻译先)
Private Sub Command1_Click(Index As Integer)
Dim rtn As Integer   
  Dim cnt1(5) As Double   
  cnt1(0) = 2000   
  cnt1(1) = 0   
  cnt1(2) = 0   
  cnt1(3) = 0   
  cnt1(4) = 0   
  rtn = GT_MapAxis(1, cnt1)  
End Sub

然后保存为exe的时候,提示--编译错误:ByRef参数类型不符。光标指向rtn = GT_MapAxis(1, cnt1) 这

句话的cnt1


——————————————————————————————————————————
所以,请教下老师,该怎么设定 数组 cnt1,cnt2,cnt3,cnt4 以及 cnt1(5),cnt2(5),cnt3

(5),cnt4(5)的类型。
也就是把上面的C++语言改成 VB语言 我整了一整晚了也没弄出来,要映射轴后画坐标系,是一个运动控制平台。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是Tiger_Zhao大侠帮助我弄的,可能我先前函数定义没给全,以下代码放上去后生成EXE时还是提示--编译错误:ByRef参数类型不符。光标指向rtn = GT_MapAxis(1, cnt1) 这

句话的cnt1

Dim rtn As Integer   
  Dim t as TMap
  t.cnt(1) = 2000   
  t.cnt(2) = 0   
  t.cnt(3) = 0   
  t.cnt(4) = 0   
  t.cnt(5) = 0   
  rtn = GT_MapAxis(1, cnt1)  

好象一个帖子只让补充3次 我才再来开一贴。。。。不管怎么样,先谢谢Tiger_Zhao大侠!! --------------------编程问答-------------------- rtn = GT_MapAxis(1, t)   

试试看 --------------------编程问答--------------------
引用 1 楼 clear_zero 的回复:
rtn = GT_MapAxis(1, t)  

试试看


那原来的rtn=GT_MapAxis(1,cnt1)是表示映射第1 轴到X 轴 
那用了rtn = GT_MapAxis(1, t) 是表示映射第1 轴到X 轴

那映射第2 轴到y 轴要用什么样的表达示啊?rtn = GT_MapAxis(2, t)  其中t不变 ? --------------------编程问答-------------------- VarPtr( cnt1 ) 试一下,指针的问题吧 --------------------编程问答-------------------- rtn=GT_MapAxis(1,VarPtr(cnt1) ) --------------------编程问答-------------------- Private Sub Command1_Click(Index As Integer)
Dim rtn As Integer   
  Dim cnt1(5) As Double   
  cnt1(0) = 2000   
  cnt1(1) = 0   
  cnt1(2) = 0   
  cnt1(3) = 0   
  cnt1(4) = 0   
  rtn = GT_MapAxis(1, cnt1)   
End Sub
--------
上图中红色cnt1好像应为cnt1() --------------------编程问答-------------------- 你应该先求助开发商,能被 VB 调用的函数必须是 stdcall 的。 --------------------编程问答--------------------
引用楼主 yinguiren000ren 的回复:
Public Type TMap
  cnt(1 To 5) As Double
End Type

Public Declare Function GT_MapAxis Lib "gt400.dll" (ByVal axis As Integer, map As TMap) As  

Integer
~~~~~~~~模块中的大量声明~~~~
~~~~~~~~~~
~~~~~省……


晕,太专业了,也太复杂。
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,