System.IntPtr
ref StringBuilder

解决方案 »

  1.   


    [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)
      

  2.   

    用楼上的方法,返回的参数有两个不正常
    返回值:
    CardID=??  ExpireDay=该怎么转换
      

  3.   

    [DllImport..... ]
    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 );
    其余参数与此同
      

  4.   

    我是这样调用的:[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)  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)为什么显示不正常
      

  5.   

    CardID:卡序列号(4字节,HEX) 
    ExpireDay:卡有效期(3字节,Hex年月日) 这两个传出参数怎么接
      

  6.   

    需要输出的使用ref 不需要的使用string 就可以了
      

  7.   

    我用 byte[]接的两个传出参数 CardID:卡序列号(4字节,HEX)和ExpireDay:卡有效期(3字节,Hex年月日)为什么我运行程序的时候这两个传出参数的传出值总是改变呢(因为是读取的卡片里面的信息,这两个参数的传出值是不变的)还请各位高手解答!
      

  8.   

    3个字节表示 date ,比较麻烦
    c++ 表示时间一般用int64(8字节)或int32(4个字节),你需要了解c++ ,这个结构的具体内存布局
      

  9.   

    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;
    }