1.DLL原形:
  int __stdcall _ReadCard(char *S); //读卡2.
在DELPHI调用返回:
{182,193,191,168,202,167,176,220,161,163,'E','r','r','o','r',':','-','2','2',0}
显示:读卡失败。Error:-223.
在vs2005+C#调用:
[DllImport("LsdSle4442.dll", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
        public static extern Int32 _ReadCard(byte[] S);   private void btnRead_Click(object sender, EventArgs e)
  {
            byte[] buf;
            buf = new Byte[255];
            int n = _ReadCard(buf);
            string s = Encoding.ASCII.GetString(buf);            MessageBox.Show(s);
  }
中buf返回:
{182,193,191,168,202,167,176,220,161,163,69,114,114,111,114,58,45,50,50,0,...}
显示:??????????Error:-22问:既然得到了正确的数据,我怎样才能让它显示为:读卡失败。Error:-22

解决方案 »

  1.   

    Encoding.ASCII 不对,试试其他的, 如 Encoding.GetEncoding("GB2312") 之类, 具体查查 msdn。
      

  2.   

    显然 ??????????Error:-22 是string s 的值
    你去掉前面的?就可以了
      

  3.   

    to wuyi8808(TM)   空间(Ⅳ) C#默认的是UNICODE吧?
      

  4.   

    using System.Text;
    using System.Windows.Forms;class Program
    {
      static void Main()
      {    
        byte[] buf = {182,193,191,168,202,167,176,220,161,163,69,114,114,111,114,58,45,50,50,0,};
        string s = Encoding.GetEncoding("GB2312").GetString(buf);
        MessageBox.Show(s);
      }
    }// 显示:读卡失败。Error:-22
      

  5.   

    string s = Encoding.GetEncoding("GB2312").GetString(buf);这一句换成string s = Encoding.Default.GetString(buf);
    用系统默认的字符集来解码,不要固定为GB2312,这样以后如果要移植在非中文的系统上减少麻烦。