跪求调用动态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#