在VB里有一结构体定义如下:
Type Struct_XfRec                 '消费记录结构
    RecordID            As Long   '记录流水号
    CardID              As Long   '卡流水号
    CardValue           As Long   '卡余额
    ConsumeMoney        As Long   '消费金额
    ConsumeDate         As String * 12 '消费时间
    UseCount            As Integer '卡使用次数
    SaleOperatorID      As Byte   '营业员编号
    DealFlag            As Byte   '餐类
    Address             As Integer '机器地址
End Type我转换成DELPHI的类型如下:
Type
  Struct_XfRec=Record                 //消费记录结构
    RecordID            : Longint;   //记录流水号
    CardID              : Longint;   //卡流水号
    CardValue           : Longint;   //卡余额
    ConsumeMoney        : Longint;   //消费金额
    ConsumeDate         : string;  //消费时间
    UseCount            : Longint; //卡使用次数
    SaleOperatorID      : String;   //营业员编号
    DealFlag            : String;   //餐类
    Address             : Integer; //机器地址
  End;
上面的结构体作为一个函数的传入参数的类型,在VB下调用是没问题,但是在DELPHI下就报非法访问地址的英文错误!!
那个函数的声明如下:
function Get_Node_Curr_Rec_N(CommPortHandle:integer;var GudtConsumeData:struct_xfRec):longint;stdcall;far;external '...dll';我跟踪过,发现是  consumeData 类型的问题,也就是  
VB的类型      string * 12 
DELPHI的类型 string之间转换的问题,请大家帮忙分析一下要怎么转换二者???

解决方案 »

  1.   

    VB的类型      string * 12 
    DELPHI的类型 string[12]
      

  2.   

    string[12]? 是什么类型,是不是要定义成数组类型:
    array [1..12] of string;
      

  3.   


    VB不是很了解,转换后的语法,应该是这样的。ConsumeDate : array[0..11] of AnsiChar;
      

  4.   

    array [1..12] of string;
    array [1..12] of AnsiChar;都不行,还是会报错.用 string[12] 没有报错,但是把结构体后面的值都弄错位了,应该
    是 string[12]的长度和 string * 12 不一致吧?
      

  5.   

    string[12],在delphi中占13个字节,第一个表示后面字符的个数,后面一共12个字符位置。
    而在Struct_XfRec=Record 中,由于不是packed,所以需要对齐,所以占用了16位。
    如果VB中string *12 表示是12个字节的话,那么这里就应该是:
    string[11],或array[0..11] of char
                   
      

  6.   

    Type 
      Struct_XfRec = packed record               //消费记录结构 
        RecordID            : LongInt;  //记录流水号    
        CardID              : LongInt;  //卡流水号      
        CardValue          : LongInt;  //卡余额         
        ConsumeMoney        : LongInt;  //消费金额      
        ConsumeDate        array [0..12-1] of AnsiChar; //消费时间
        UseCount            :SmallInt; //卡使用次数   
        SaleOperatorID      : Byte;  //营业员编号     
        DealFlag            : Byte;  //餐类           
        Address            :SmallInt; //机器地址      
      End;
      

  7.   

    不是告诉你。 
    array[0..11] of ansiChar;  //12个字节,为什么你要用11个字节呢
      

  8.   

    小小_8讲的道理是正确的
    VB我没玩过,string *12到底是有几个字符?
    按道理来说你定义Stirng[n],n等于多少都不会报错啊
    当n小于你要字符的个数的时候,会自动截断
      

  9.   

    string类型不能用变长,要定长string[12]