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
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
你去掉前面的?就可以了
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
用系统默认的字符集来解码,不要固定为GB2312,这样以后如果要移植在非中文的系统上减少麻烦。