关于c#调用c++的dll文件,参数对照和返回问题

fanbo 2009-08-14 02:39:53
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表示的字符串呢?望高手教我!或者是因为我使用的参数类型不对?
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanhuiqiao 2009-08-14
  • 打赏
  • 举报
回复
很可能是字符集的问题
fanbo 2009-08-14
  • 打赏
  • 举报
回复
谢谢楼上各位,的确是 CharSet =这个参数 的问题!
将之改正后就好了。
再次谢谢大家。
soaringbird 2009-08-14
  • 打赏
  • 举报
回复
一般情况下,不要指定CharSet =这个参数,默认就可以了,更不要随便指定Auto。
soaringbird 2009-08-14
  • 打赏
  • 举报
回复
用stringbuilder接收ascii码是没有问题的,就用ToString得到字符串就可以。你得到的是乱码是因为这个:CharSet = CharSet.Auto,换成CharSet = CharSet.Ansi就会好的。
dancingbit 2009-08-14
  • 打赏
  • 举报
回复
用byte[]代替StringBuilder作参数,然后使用2L的方法返回字符串。
Avoid 2009-08-14
  • 打赏
  • 举报
回复
楼上都说了
starts_2000 2009-08-14
  • 打赏
  • 举报
回复
Encoding.ASCII.GetString()
qqiuzaihui 2009-08-14
  • 打赏
  • 举报
回复
CharSet = CharSet.Ansi
试试.

110,572

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧