当前位置:编程学习 > C#/ASP.NET >>

跪求调用动态dll返回乱码问题~~~~~~~~~ 急~~ 在线等~~~~

我们这在做个项目中用到了.net 技术 而本人对.net 了解又甚少  需要调用找人买的一套程序,这套小程序只能用.net 调用, 好不容易调用出来了,可是 调用之后 我传入一个数字图片他可以给我返回图片上的数字,但是如果我传入的是字母的图片返回的就是一堆问号 还请各位大虾帮忙看看是什么问题~~~

代码 如下
他给出两种调用方式 可是两种调用方式一样都会出现上面的问题~  请问为什么~~~~


static void Main(string[] args)
        {
            Console.WriteLine(Program.poCode());
            Console.Read();
        }

        [DllImport("ycode.dll")]
        public static extern int loadcode(int code, int Length, String address, String pass);
        [DllImport("ycode.dll", EntryPoint = "Recognition")]
        public static extern string Recognition(int ItemNo, int picin, int Length, string Address1, string Address2, out int lppicout, out int lpLength, out int cLength);
        [DllImport("ycode.dll", EntryPoint = "Recognitiond")]
        public static extern int Recognitiond(int ItemNo, int picin, int Length, string Address1, string Address2);

        public static string poCode()
        {
            
            //int no1 = 0, no2 = 0;
            int n1, n2, n3 = 0;
            string strd = System.Environment.CurrentDirectory + @"\CODE.bmp";
            loadcode(0, 0, System.Environment.CurrentDirectory + @"\5649.fc", "mjne3net4cn");
            //string strd = @"C:\src\FrmTest\FrmTest\bin\Debug\ibc.bmp";
            //string tmp =  "";
            //for (int i = 0; i < 20; i++)
            //{
            //    int ptr = Recognitiond(1, 0, 0, null, strd);
            //    tmp = Marshal.PtrToStringAnsi((IntPtr)ptr);
            //}
            string temp = "";
            string returnzhi = Recognition(1, 0, 0, temp, strd, out n1, out n2, out n3);
            //Console.WriteLine("值为:" + returnzhi);
            return returnzhi;
        } --------------------编程问答-------------------- 这是一段转换的代码,写的比较乱,只是测试用的。
传入一个其他编码的字符串,返回gb2312编码的字符串。
string GetStringA(string Value)
  {
  byte[] bData = Encoding.GetEncoding("gb2312") .GetBytes(Value);
  byte[] bDataresult = new byte[bData.Length];
  int i = 0;
  for (i = 0; i < bData.Length; i++)
  {
  if (bData[i] == 0) break;
  bDataresult[i] = bData[i];
  }
  string Result = Encoding.GetEncoding("gb2312").GetString(bDataresult, 0, i);
  return Result;
  }



获取数据的时候,传入StringBuilder,应该可以返回的。
但是不能保证一定会返回正确,有许多函数内部做处理的话,
可能不会有数据返回,或者返回的多余的垃圾数据。

你最好把得到的数据存入到一个文件中,用UE之类的文本编辑工具打开,
使用其中的转换功能(文件菜单中),实际转换一下,看看是那中编码。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,