我用labview写了一个DLL,其原型如下:
    long __stdcall TestIntArray(TD3Hdl *Ay);typedef struct {
long dimSize;
long Numeric[1];
} TD3;
typedef TD3 **TD3Hdl;想在DELPHI中用调用,请问delphi中如何写声明函数,尤其是结构类型中的“long Numeric[1]”如何定义。
初来贵地,谢谢指点,十分感谢。

解决方案 »

  1.   

    自己找一下,这段时间好像问这个挺多的你那个是结构
    typedef struct {
    long dimSize;
    long Numeric[1];
    } TD3;
    typedef TD3 **TD3Hdl;
    =》
    type 
      PPTD3=^PTD3;
      PTD3=^TD3;  
      TD3=record
      dimsize:LongInt;
      Numeric:array[0..1] of LongInt; 
    end;
    long __stdcall TestIntArray(TD3Hdl *Ay);
    =>
    function TestIntArray(ay:PPTD3):Longint;stdcall;extern '';
      

  2.   

    To:dd_zhouqian,按照你的提示,我试了一下,还是有问题,请再赐教。type
      PTD3=^TD3;
      PPTD3=^PTD3;
      TD3=record
         dimsize:integer;
         Numeric:array[0..1] of integer;
      end;implementation
       Function TestIntArray(a:PPTD3):integer;stdcall;external'LabLib.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    var
      a:PTD3;
    begin
      new(a);
      a.dimsize:=1;
      a.Numeric[1]:=2;
      TestIntArray(@a);
      dispose(a);
    end;
      

  3.   

    long Numeric[1];
    是1个元素的数组,用Delphi表示应该是:Numeric: array[0..0] of Longint;
      

  4.   

    Numeric: array[1..1] of Longint;
    也是可以的
      

  5.   

    其实我早就试过了,array[0..0]of longint 和array[1..1]of longint都试过了,不行的。
    这里的函数实际上是接受动态数组的。
      

  6.   

    long Numeric[1]; --> Numeric:integer;就可以了,array[0..0]of longint 和array[1..1]of longint 这些多此一举八成是你DLL的问题,如果输出动态数组的话,最好用指针
      

  7.   

    将long Numeric[1]; 改为Numeric:integer,程序问题依然。其实,我想通过上述的例子弄清那种结构类型的调用问题。现在,我把我的实际问题说说,labview中做了一个子VI(函数)ConvertFRStringArrayToFR,它的作用是把一个字符串数组经过分解、计算后,输出一个字符串,问题的关键就在于如何把这个字符串数组输入进去。关于原型函数和相关结构的定义如下:
    typedef struct {
    int32 cnt; /* number of bytes that follow */
    uChar str[1]; /* cnt bytes */
    } LStr, *LStrPtr, **LStrHandle;typedef struct {
    long dimSize;
    LStrHandle String[1];
    } TD2;
    typedef TD2 **TD2Hdl;void __stdcall ConvertFRStringArrayToFR(TD2Hdl *Str_FA_Ay, PStr Str_out);
    这几天一直为这个问题苦恼,请各位赐教,最好能将完整代码写出,先谢谢了。