#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显示的都是乱码?
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显示的都是乱码?
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;
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;
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;
这个是表示字节对齐,所以你在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;这样就行了
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;