VC中的程序如下所示:其中GT_MapAxis(short Axis_Num, double * map_count)是固高运动控制卡中的一个函数,实现多轴映射的功能(现在不去管它)。函数中“short Axis_Num”表示控制的电机轴(1表示控制一轴,2表示控制二轴),“double * map_count”表示一个double型的数组;cnt1和cnt2表示两个数组,以下程序在VC中通过
         double cnt1[5]={1,0,0,0,0};
         double cnt2[5]={0,1,0,0,0};
         GT_MapAxis(1,cnt1);      
         GT_MapAxis(2,cnt2);
以下是我在Delphi6.0中转换的相应程序
procedure TForm2.Button1Click(Sender: TObject);
var
    cnt1:array[1..5] of char;
    cnt2:array[1..5] of char;
begin   
    cnt1[1]:='1';
    cnt1[2]:='0';
    cnt1[3]:='0';
    cnt1[4]:='0';
    cnt1[5]:='0';
    double(cnt1);    cnt2[1]:='0';
    cnt2[2]:='1';
    cnt2[3]:='0';
    cnt2[4]:='0';
    cnt2[5]:='0';
    double(cnt2);
    
    GT_MapAxis(1,cnt1);
    GT_MapAxis(1,cnt2);end;调试程序时,老是报错
[Error] Unit2.pas(79): Invalid typecast
[Error] Unit2.pas(86): Invalid typecast
[Error] Unit2.pas(89): Incompatible types: 'Array' and 'PDouble'
[Error] Unit2.pas(90): Incompatible types: 'Array' and 'PDouble'
不知道是不是我数组转换得不对,请高手指教,万分感谢!

解决方案 »

  1.   

    GT_MapAxis函数申明成这样:
    procedure GT_MapAxis(Axis_Num: SmallInt;  map_count: PDouble);  stdcall;  external 'XXX.dll';
    procedure TForm2.Button1Click(Sender: TObject);
    var
        cnt1:array[1..5] of Double;
        cnt2:array[1..5] of Double;
    begin
        cnt1[1]:=1;
        cnt1[2]:=0;
        cnt1[3]:=0;
        cnt1[4]:=0;
        cnt1[5]:=0;    cnt2[1]:=0;
        cnt2[2]:=1;
        cnt2[3]:=0;
        cnt2[4]:=0;
        cnt2[5]:=0;    GT_MapAxis(1, @cnt1[1]);
        GT_MapAxis(1, @cnt2[1]);
    end;
    end;
      

  2.   

    我在做一个项目,用固高运动控制卡GT400-SV系列去控制电机,实现多轴协调运动的功能,用Delphi6.0做人机界面时调用固高控制卡里的函数出现的上述问题,因为Delphi没学过(同样在VC里运行没问题的),这个我调试好长时间了,非常感谢jadeluo(秀峰)帮我解决了这个问题。
      

  3.   

    double cnt1[5]={1,0,0,0,0};
    这个数组的长度是多少?5还是6?
      

  4.   

    double cnt1[5]={1,0,0,0,0};  长度为5
      

  5.   

    delphi 中 数组下标也是从0开始