3个字节表示 date ,比较麻烦 c++ 表示时间一般用int64(8字节)或int32(4个字节),你需要了解c++ ,这个结构的具体内存布局
try [System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)] struct date { [System.Runtime.InteropServices.FieldOffset(0)] public byte year; [System.Runtime.InteropServices.FieldOffset(1)] public byte month; [System.Runtime.InteropServices.FieldOffset(0)] public byte day; }
[DllImport("C++.dll")]
public static int extern ReadCardInf(int ComPort,[MarshalAsAttribute(UnmanagedType.LPStr)] StringBuilder CardNum,
[MarshalAsAttribute(UnmanagedType.LPStr)] StringBuilder CardNum1,[MarshalAsAttribute(UnmanagedType.LPStr)]
StringBuilder CardID,ref int CardType,
[MarshalAsAttribute(UnmanagedType.LPStr)] StringBuilder ExpireDay)
返回值:
CardID=?? ExpireDay=该怎么转换
extern static int ReadCardInfo(int ComPort, System.IntPtr CardNum,System.IntPtr CardNum1, System.Intptr CardID,ref int CardType, System.IntPtr ExpireDay);调用
byte[] cardNum = new byte[10];
System.IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement( cardNum ,0 );
其余参数与此同
public static int extern ReadCardInf(int ComPort,[MarshalAsAttribute(UnmanagedType.LPStr)] StringBuilder CardNum,
[MarshalAsAttribute(UnmanagedType.LPStr)] StringBuilder CardNum1,[MarshalAsAttribute(UnmanagedType.LPStr)]
StringBuilder CardID,ref int CardType,
[MarshalAsAttribute(UnmanagedType.LPStr)] StringBuilder ExpireDay) private void ReadCard()
{
StringBuilder CardNum=new StringBuilder();
StringBuilder CardNum1=new StringBuilder();
StringBuilder CardID=new StringBuilder();
StringBuilder ExpireDay=new StringBuilder();
int CardType;
ReadCardInfo(Convert.ToInt32(textBox1.Text), CardNum, CardNum1, out CardID, out CardType, ExpireDay)
string xinxi = "卡号;" + CardNum.ToString()+ "交易卡号;" + CardNum1.ToString()+"卡序列号;"+CardID.ToString()+"卡类:"+CardType.ToString()+"卡有效期:"+ExpireDay.ToString();
}运行之后的结果,xinxi=“卡号;1008212025交易卡号;0033197卡序列号;??卡类:1卡有效期:"
卡序列号(参数CardID)和卡的有效期(参数ExpireDay)为什么显示不正常
ExpireDay:卡有效期(3字节,Hex年月日) 这两个传出参数怎么接
c++ 表示时间一般用int64(8字节)或int32(4个字节),你需要了解c++ ,这个结构的具体内存布局
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct date
{
[System.Runtime.InteropServices.FieldOffset(0)]
public byte year;
[System.Runtime.InteropServices.FieldOffset(1)]
public byte month;
[System.Runtime.InteropServices.FieldOffset(0)]
public byte day;
}