WinSock單元中的紀錄類型定義,type
  PHostEnt = ^THostEnt;
  {$EXTERNALSYM hostent}     //這句有甚麼作用,
  hostent = record
    h_name: PChar;
    h_aliases: ^PChar;
    h_addrtype: Smallint;
    h_length: Smallint;
    case Byte of                   //這裡的Byte參數取的是甚麼值?
      0: (h_addr_list: ^PChar);
      1: (h_addr: ^PChar)
  end;

解决方案 »

  1.   

    {$EXTERNALSYM hostent} 这句是让变量名hostent不受C++头文件中同名的影响。
    case Byte of                   
          0: (h_addr_list: ^PChar);
          1: (h_addr: ^PChar)这里Byte取得就是0和1啊!
      

  2.   

    hostent = record
        h_name: PChar;
        h_aliases: ^PChar;
        h_addrtype: Smallint;
        h_length: Smallint;
        case Byte of      
          0: (h_addr_list: ^PChar);
          1: (h_addr: ^PChar)这是一个变体记录,case中的0和1部分共享一段内存,0和1只是为了给变体记录的变体字段分组,而0和1指定为Byte类型的,如果你给h_addr_list赋了值,那么相应的h_addr也给赋了值!
      

  3.   

    我知道Byte值是0,1;
    我想問的是在甚麼時候給Byte變量賦值;
    sorry
    我沒表達清楚;
    麻煩再指點下
      

  4.   

    Byte变量不要你赋值的,它只是代表0,1的类型,比如我还能这么写:
    case Boolean of      
          True: (h_addr_list: ^PChar);
          False: (h_addr: ^PChar)
    懂了吗??
      

  5.   

    如果你这么写的话
    case tag: Byte of      
      0: (h_addr_list: ^PChar);
      1: (h_addr: ^PChar)
    那么在这里tag也是记录的一个字段,你可以给它赋值。