dll的说明中有下列程序
int ReadCardInfo(int ComPort, unsigned char *CardNum,unsigned char *CardNum1,unsigned char *CardID,int &CardType,unsigned char *ExpireDay)
入口参数:
出口参数:      
        CardNum:卡显示卡号(10字节,ASCII码) 
        CardNum1:交易卡号(7字节,ASCII码)    
        CardID:卡序列号(4字节,HEX)        
        cardType:卡类
        ExpireDay:卡有效期(3字节,Hex年月日)
我在c#中,这样应用。
[DllImport("SmartCom411SFJ.dll", CharSet = CharSet.Auto)]
public static extern int ReadCardInfo(int ComPort, StringBuilder CardNum, StringBuilder CardNum1, StringBuilder CardID, ref int CardType, StringBuilder ExpireDay);
将cardnum的返回值放到了一个stringbuilder类型中,但是由于其中是ASCII码,所以我使用
string scardn = CardNum.ToString();
语句后,scardn则变成了乱码!
我应该怎么样才能得到这些ascii表示的字符串呢?望高手教我!或者是因为我使用的参数类型不对?

解决方案 »

  1.   

    CharSet = CharSet.Ansi
    试试.
      

  2.   

    用byte[]代替StringBuilder作参数,然后使用2L的方法返回字符串。
      

  3.   

    用stringbuilder接收ascii码是没有问题的,就用ToString得到字符串就可以。你得到的是乱码是因为这个:CharSet = CharSet.Auto,换成CharSet = CharSet.Ansi就会好的。
      

  4.   

    一般情况下,不要指定CharSet =这个参数,默认就可以了,更不要随便指定Auto。
      

  5.   

    谢谢楼上各位,的确是 CharSet =这个参数 的问题!
    将之改正后就好了。
    再次谢谢大家。