#pragma pack(1) 
typedef struct tagIDCardData{ 
char Name[32]; 
char Sex[4]; 
char Nation[6]; 
char Born[18]; 
char Address[72]; 
char IDCardNo[38]; 
char GrantDept[32]; 
char UserLifeBegin[18]; 
char UserLifeEnd[18]; 
char reserved[38]; 
char PhotoFileName[255]; 
}IDCardData; 
问题一,以上是哪种语言的定义方式?
问题二,如果用delphi来调用包含有这个记录变量的dll,在DELPHI里该怎么定义这个记录变量,用以返回的接收数据。我这前是这样子做的:type
  tagIDCardData = packed record
    Name: array[0..31] of AnsiChar;
    Sex: array[0..3] of AnsiChar;
    Nation: array[0..17] of AnsiChar;
    Born: array[0..18] of AnsiChar;
    Address: array[0..90] of AnsiChar;
    IDCardNo: array[0..37] of AnsiChar;
    GrantDept: array[0..31] of AnsiChar;
    UserLifeBegin: array[0..17] of AnsiChar;
    UserLifeEnd: array[0..17] of AnsiChar;
    Reserved: array[0..37] of AnsiChar;
    PhotoFileName: array[0..254] of AnsiChar;
  end;
  IDCardData  = tagIDCardData;
  PIDCardData = ^IDCardData;接收返回数据的时候是这样子的:      if  Syn_ReadMsg(1001,0,MyCardData) = 0 then
      begin
        //ShowMessage('读到了');
        lbl1.Caption:=MyCardData.Name;
        lbl2.Caption:=MyCardData.Sex;
        lbl3.Caption:=MyCardData.Nation;
        lbl4.Caption:=MyCardData.Born;
        lbl5.Caption:=MyCardData.Address;
        lbl6.Caption:=MyCardData.IDCardNo;
        lbl7.Caption:=MyCardData.GrantDept;
        lbl8.Caption:=MyCardData.UserLifeBegin;
        lbl9.Caption:=MyCardData.UserLifeEnd;
        lbl10.Caption:=MyCardData.reserved;
        img1.Picture.Bitmap.LoadFromFile('tmp.bmp');
        img1.Picture.Bitmap.Transparent := True;
        img1.Picture.Bitmap.TransParentColor := img1.Picture.Bitmap.canvas.pixels[5,3];
        Syn_SendSound(0);
        Syn_DelPhotoFile;
      end;  这样子做有问题,就是除了lbl1.Caption:=MyCardData.Name;这里显示的不是乱码之外,其他的labal显示的都是乱码?

解决方案 »

  1.   

    C++的结构定义
    type
      PIDCardData = ^tagIDCardData;
      tagIDCardData = packed record
        Name: array[0..31] of AnsiChar;
        Sex: array[0..3] of AnsiChar;
        Nation: array[0..17] of AnsiChar;
        Born: array[0..18] of AnsiChar;
        Address: array[0..90] of AnsiChar;
        IDCardNo: array[0..37] of AnsiChar;
        GrantDept: array[0..31] of AnsiChar;
        UserLifeBegin: array[0..17] of AnsiChar;
        UserLifeEnd: array[0..17] of AnsiChar;
        Reserved: array[0..37] of AnsiChar;
        PhotoFileName: array[0..254] of AnsiChar;
      end;
      

  2.   

        Born: array[0..18] of AnsiChar;
        Address: array[0..90] of AnsiChar;这里好像跟C++里的char Born[18]; 
    char Address[72];  大小不同吧
    或者试试C++
    double dMatrix[50] [20];OP
    var
    dMatrix: array[1..50, 1..20] of double;
    type 
      PIDCardData = ^tagIDCardData; 
      tagIDCardData = packed record 
        Name: array[1..32] of AnsiChar; 
        Sex: array[1..32] of AnsiChar; 
        Nation: array[1..18] of AnsiChar; 
        Born: array[1..18] of AnsiChar;     //
        Address: array[1..72] of AnsiChar;  //不知道你是不是写错
        IDCardNo: array[1..38] of AnsiChar; 
        GrantDept: array[1..32] of AnsiChar; 
        UserLifeBegin: array[1..18] of AnsiChar; 
        UserLifeEnd: array[1..18] of AnsiChar; 
        Reserved: array[1..38] of AnsiChar; 
        PhotoFileName: array[1..255] of AnsiChar; 
      end; 
      

  3.   

    1.肯定是c的
    2.我是这样定义的
    type
      tagIDCardData = packed record
        Name: array[0..31] of Char;
        Sex: array[0..3] of Char;
        Nation: array[0..17] of Char;
        Born: array[0..18] of Char;
        Address: array[0..90] of Char;
        IDCardNo: array[0..37] of Char;
        GrantDept: array[0..31] of Char;
        UserLifeBegin: array[0..17] of Char;
        UserLifeEnd: array[0..17] of Char;
        Reserved: array[0..37] of Char;
        PhotoFileName: array[0..254] of Char;
      end;
      IDCardData  = tagIDCardData;
      PIDCardData = ^IDCardData;
      

  4.   

    #pragma pack(1) 
    这个是表示字节对齐,所以你在dephi里定义这个结构体时必须加上Packed,否则就会出现字节混乱的情况typedef struct tagIDCardData{ 
    char Name[32]; 
    char Sex[4]; 
    char Nation[6]; 
    char Born[18]; 
    char Address[72]; 
    char IDCardNo[38]; 
    char GrantDept[32]; 
    char UserLifeBegin[18]; 
    char UserLifeEnd[18]; 
    char reserved[38]; 
    char PhotoFileName[255]; 
    }IDCardData; 转成delphitype tagIDCardData = Packed record
      Name : [0..31] of Char;
      Sex : [0..3] of Char;
      Nation : [0..5] of Char;
      Born : [0..17] of char; 
      Address : [0..71] of char; 
      IDCardNo : [0..37] of char; 
      GrantDept : [0..31] of char; 
      UserLifeBegin : [0..17] of char; 
      UserLifeEnd : [0..17] of char; 
      reserved : [0..37] of char; 
      PhotoFileName : [0..254] of char;
    end;这样就行了
      

  5.   

    有三处的大小与原定义不同:type
      tagIDCardData = packed record
        Name: array[0..31] of AnsiChar;
        Sex: array[0..3] of AnsiChar;
        Nation: array[0..5] of AnsiChar;         //(1)
        Born: array[0..17] of AnsiChar;          //(2)
        Address: array[0..71] of AnsiChar;       //(3)
        IDCardNo: array[0..37] of AnsiChar;
        GrantDept: array[0..31] of AnsiChar;
        UserLifeBegin: array[0..17] of AnsiChar;
        UserLifeEnd: array[0..17] of AnsiChar;
        Reserved: array[0..37] of AnsiChar;
        PhotoFileName: array[0..254] of AnsiChar;
      end;
      IDCardData  = tagIDCardData;
      PIDCardData = ^IDCardData;
      

  6.   

    谢谢 jadeeluo ,winstonbonaparte 一语道破了天机啊。。也谢谢其他人。谢谢。