哎,一看就知道是弄IC卡的.弄发卡器吧.
TParaBuf=record
ComNo:integer; //串口号
Baud:integer; //波特率 (一般设为115200)
Sys_Sec:array [1..3] of integer; //系统扇区1,2,3 (一般设为0,1,2)
User_Sec:array [1..3] of integer; //用户扇区1,2,3 (一般设为3,4,5,可以自由设置)
AuthorNo:array [1..6] of PChar;结构体对齐就是内存要对齐.它这里使用了默认的DELPHI字节对齐方式,你在定义结构体的时候也要.
按照上面的定义一个C#版本,然后packed = 4就可以了.
TParaBuf=record
ComNo:integer; //串口号
Baud:integer; //波特率 (一般设为115200)
Sys_Sec:array [1..3] of integer; //系统扇区1,2,3 (一般设为0,1,2)
User_Sec:array [1..3] of integer; //用户扇区1,2,3 (一般设为3,4,5,可以自由设置)
AuthorNo:array [1..6] of PChar;结构体对齐就是内存要对齐.它这里使用了默认的DELPHI字节对齐方式,你在定义结构体的时候也要.
按照上面的定义一个C#版本,然后packed = 4就可以了.
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 4)]
public struct TParaBuf
{
[MarshalAs(UnmanagedType.LPStr)]
public int ComNo;
[MarshalAs(UnmanagedType.LPStr)]
public int Baud;
[MarshalAs(UnmanagedType.LPStr)]
public int Sys_Sec;
[MarshalAs(UnmanagedType.LPStr)]
public int User_Sec;
[MarshalAs(UnmanagedType.LPStr)]
public string AuthorNo; }
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 4)]
public struct TParaBuf
{
[MarshalAs(UnmanagedType.LPStr)]
public int ComNo;
[MarshalAs(UnmanagedType.LPStr)]
public int Baud;
[MarshalAs(UnmanagedType.LPStr)]
public int Sys_Sec;
[MarshalAs(UnmanagedType.LPStr)]
public int User_Sec;
[MarshalAs(UnmanagedType.LPStr)]
public string AuthorNo; }