Delphi做的动态庫的头文件声明了以下结构体: T2001_DOOR_ACCESS = packed array[1..7, 1..7] of packed record
    StartTime: Word;                    //起始时间
    EndTime: Word;                      //结束时间
    //时间是双秒制,即: 0=0:0:0  1=0:0:2 2=0:0:4 ... 43199=23:59:58
    MoDay: Byte;                        //星期一是否有效   0=无效 1=有效
    TuDay: Byte;                        //星期二是否有效   0=无效 1=有效
    WeDay: Byte;                        //星期三是否有效   0=无效 1=有效
    ThDay: Byte;                        //星期四是否有效   0=无效 1=有效
    FrDay: Byte;                        //星期五是否有效   0=无效 1=有效
    SaDay: Byte;                        //星期六是否有效   0=无效 1=有效
    SuDay: Byte;                        //星期日是否有效   0=无效 1=有效
  end;  //注册卡数据结构       3002 bytes
  T2001_CARD_LIST = packed record
     CardCount: Word;                    //注册的卡的数量
     Cards: packed array[0..999] of packed record //用户卡号
        Cardzn: Byte;                     //区号
        Cardid: Word;                     //卡号
     end;
  end;我在VB中调用动态庫,这两个结构体怎样定义呢? 
谢谢先!

解决方案 »

  1.   

    不懂Delphi,是不是这样的啊:
     T2001_DOOR_ACCESS = packed array[1..7, 1..7] of packed record
        StartTime: Word;                    //起始时间
        EndTime: Word;                      //结束时间
        //时间是双秒制,即: 0=0:0:0  1=0:0:2 2=0:0:4 ... 43199=23:59:58
        MoDay: Byte;                        //星期一是否有效   0=无效 1=有效
        TuDay: Byte;                        //星期二是否有效   0=无效 1=有效
        WeDay: Byte;                        //星期三是否有效   0=无效 1=有效
        ThDay: Byte;                        //星期四是否有效   0=无效 1=有效
        FrDay: Byte;                        //星期五是否有效   0=无效 1=有效
        SaDay: Byte;                        //星期六是否有效   0=无效 1=有效
        SuDay: Byte;                        //星期日是否有效   0=无效 1=有效
      end;
    ----Type T2001_DOOR_ACCESS  StartTime As Long
      EndTime As Long
      MonDay As Byte
      TuDay As Byte                        //星期二是否有效   0=无效 1=有效
        WeDay As Byte                        //星期三是否有效   0=无效 1=有效
        ThDay As Byte                        //星期四是否有效   0=无效 1=有效
        FrDay As Byte                        //星期五是否有效   0=无效 1=有效
        SaDay As Byte                        //星期六是否有效   0=无效 1=有效
        SuDay As Byte   
    End Type
      

  2.   

    To benyfeifei(狒狒) ( ) :
      T2001_DOOR_ACCESS = packed array[1..7, 1..7] of packed record 是定义一个二维数组的结构体,用VB怎么样表示呢?
      

  3.   

    dim var(1 to 7 , 1 to 7) as T2001_DOOR_ACCESS
      

  4.   

    To benyfeifei(狒狒) ( ) :function F2001_SetDoorAccess(Acmid as byte, Doorid s  Byte;  DoorAccess asb T2001_DOOR_ACCESS) as Integer;
    那怎样定义呢?
      

  5.   

    Declare function F2001_SetDoorAccess Lib "文件名.DLL" (Byval Acmid as Byte, Doorid As Byte, DoorAccess As T2001_DOOR_ACCESS) As Long函数返回值可能是Integer,因为我不知道Delphi中的Integer占用几个字节,如果占用两个,则返回值是Integer型,如果占4个,则是Long
      

  6.   


    To Benyfeifi:
       
       我是不是应该这样做:
    Type T2001_DOOR_ACCESS
      StartTime As Long
      EndTime As Long
      MonDay As Byte
      TuDay As Byte                        //星期二是否有效   0=无效 1=有效
        WeDay As Byte                        //星期三是否有效   0=无效 1=有效
        ThDay As Byte                        //星期四是否有效   0=无效 1=有效
        FrDay As Byte                        //星期五是否有效   0=无效 1=有效
        SaDay As Byte                        //星期六是否有效   0=无效 1=有效
        SuDay As Byte   
    End Type Dim lRet as long 
      Dim byAcmID as byte
      Dim MyAccess(1 to 7 , 1 to 7) as T2001_DOOR_ACCESS
      ....
      lRet = F2001_SetDoorAccess(byAcmID,MyAccess)
      ....//以下是Delphi的动态庫声明:
    T2001_DOOR_ACCESS = packed array[1..7, 1..7] of packed record
        StartTime: Word;                    //起始时间
        EndTime: Word;                      //结束时间
        //时间是双秒制,即: 0=0:0:0  1=0:0:2 2=0:0:4 ... 43199=23:59:58
        MoDay: Byte;                        //星期一是否有效   0=无效 1=有效
        TuDay: Byte;                        //星期二是否有效   0=无效 1=有效
        WeDay: Byte;                        //星期三是否有效   0=无效 1=有效
        ThDay: Byte;                        //星期四是否有效   0=无效 1=有效
        FrDay: Byte;                        //星期五是否有效   0=无效 1=有效
        SaDay: Byte;                        //星期六是否有效   0=无效 1=有效
        SuDay: Byte;                        //星期日是否有效   0=无效 1=有效
      end;function F2001_SetDoorAccess(Acmid, Doorid: Byte; const DoorAccess: T2001_DOOR_ACCESS): Integer;
    stdcall; external ACM2001DLLFILE;
    { Doorid: 门序号, 1 到 2 有效
    }