结构体如下:
TMsgHead = record
    MessageTransportChannel:   array[0..260] of Char;
    MessageRelationKeyValue:   array[0..260] of Char;
    MessageInputType:                  array[0..260] of Char;
    MessageSchemaID:   array[0..260] of Char;
    MessageDestSet:   array of TDest;
end;TDest = record
    ServerExact:   array[0..260] of Char;
    ServerType:   array[0..260] of Char;
    ServerValue:   array[0..260] of Char;
end;程序中此结构体的实例msgHead是作为参数传递过来的,我用High(msgHead.MessageDestSet)取数组的长度,得到的值是-33686020。
请大家帮帮忙告诉我为什么及怎么做,谢谢了。

解决方案 »

  1.   

    High function: Returns the highest value in the range of an argument.
    High函数并不是返回数组的长度,而是返回你的参数所属变量类型的最大值。
      

  2.   

    里边你要使用SetLength 分配长度
    SetLength(MsgHead.MessageDestSet, 13);
    取长度用Length 
      

  3.   

    MsgHead.MessageDestSet中的数据是用指针传过去的,没有设长度
      

  4.   

    MessageDestSet: array of TDest;
    是变长数组,只留了一个指针
      

  5.   

    首先你要弄清楚msgHead.MessageDestSet是什么类型,如果不是数组不能用High,如果传递的是指针,不能直接取长度,因为你的结构里有动态数组,你必须对照着你的结构,依次从指针处读取详细的信息,包括元素个数等,然后再统计处整个数据的长度
      

  6.   

    MessageDestSet:array of TDest,是可变数组类型,长度要自己定的
      

  7.   


    把长度传过去。
    TMsgHead 中加一个变量,值为动态数组的长度。