C#里string是Unicode的,delphi是Ansii的,delphi中Pchar应该用PwideChar

解决方案 »

  1.   

    应该用byte[]。参考我的代码:...
    public static extern Int32 _ReadCard(byte[] S);             //读卡
            [DllImport("LsdSle4442.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    ... private void btnRead_Click(object sender, EventArgs e)
            {
                byte[] buf;
                buf = new Byte[255];
                int n = _ReadCard(buf);
                string s = Encoding.GetEncoding("GB2312").GetString(buf);
                //string s = Encoding.Default.GetString(buf);
                MessageBox.Show(s);
            }
    ...
      

  2.   

    接口函数原形是:procedure ReadCard(S: PChar);             
      

  3.   

    试了不好使,我以前也用过类似的,好使。但现在使用回调函数,属于delphi调用C#方法。
      

  4.   

    我发现一个问题,不管我在delphi里发什么样的参数,在C#第一次获取到的乱码都是:"€旮r稞溟?d旮??"。
      

  5.   

    如果有源码,把回调函数声明称stdcall形式,应该就可以了。我是这么做的,已解决。