/// 应用程序的主入口点。
/// </summary>
[DllImport("omrvfapi.dll",EntryPoint="OMR_StartReadPaper")]
public static extern void OMR_StartReadPaper(int mode);[DllImport("omrvfapi.dll",EntryPoint="OMR_GetReadResult",CharSet=CharSet.Ansi)]
public static extern int OMR_GetReadResult();[DllImport("omrvfapi.dll",EntryPoint="OMR_GetResultString",CharSet=CharSet.Ansi)]
public static extern int OMR_GetResultString( ref StringBuilder result1);[DllImport("omrvfapi.dll",EntryPoint="OMR_GetLastError",CharSet=CharSet.Ansi)]
public static extern int OMR_GetLastError();
private void button7_Click(object sender, System.EventArgs e)
{ OMR_StartReadPaper(0); //开始走纸 bool flag;
int result;
flag = true; StringBuilder resultStr = new StringBuilder(4096); while(flag)
{
result = OMR_GetReadResult(); //返回阅读结果状态 if(result==1) //阅读成功
{
try
{
MessageBox.Show("这边可以显示!下面的不能显示,直接程序自动退出了"); //问题就在这边,各位帮看看吧
int len ;
len = OMR_GetResultString(ref resultStr); //返回机器识别到的字符串长度,resultStr为机器识别到得字符串
MessageBox.Show(resultStr.ToString()); //显示识别结果
this.richTextBox1.Text= resultStr.ToString();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else //识别异常情况
{
int err;
string ls_error;
ls_error=""; err=OMR_GetLastError();
switch (err)
{
case 10:
ls_error="等待串口超时!";break;
case 11:
ls_error="信息卡跟张!";break;
}
MessageBox.Show(ls_error);
}
}
}
/// </summary>
[DllImport("omrvfapi.dll",EntryPoint="OMR_StartReadPaper")]
public static extern void OMR_StartReadPaper(int mode);[DllImport("omrvfapi.dll",EntryPoint="OMR_GetReadResult",CharSet=CharSet.Ansi)]
public static extern int OMR_GetReadResult();[DllImport("omrvfapi.dll",EntryPoint="OMR_GetResultString",CharSet=CharSet.Ansi)]
public static extern int OMR_GetResultString( ref StringBuilder result1);[DllImport("omrvfapi.dll",EntryPoint="OMR_GetLastError",CharSet=CharSet.Ansi)]
public static extern int OMR_GetLastError();
private void button7_Click(object sender, System.EventArgs e)
{ OMR_StartReadPaper(0); //开始走纸 bool flag;
int result;
flag = true; StringBuilder resultStr = new StringBuilder(4096); while(flag)
{
result = OMR_GetReadResult(); //返回阅读结果状态 if(result==1) //阅读成功
{
try
{
MessageBox.Show("这边可以显示!下面的不能显示,直接程序自动退出了"); //问题就在这边,各位帮看看吧
int len ;
len = OMR_GetResultString(ref resultStr); //返回机器识别到的字符串长度,resultStr为机器识别到得字符串
MessageBox.Show(resultStr.ToString()); //显示识别结果
this.richTextBox1.Text= resultStr.ToString();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else //识别异常情况
{
int err;
string ls_error;
ls_error=""; err=OMR_GetLastError();
switch (err)
{
case 10:
ls_error="等待串口超时!";break;
case 11:
ls_error="信息卡跟张!";break;
}
MessageBox.Show(ls_error);
}
}
}
len = OMR_GetResultString(ref resultStr); //返回机器识别到的字符串长度,resultStr为机器识别到得字符串
看能不能执行到这一步,F10慢慢调,缩小范围先
MessageBox.Show(len.ToString());不知道是不是引用传递定义的不对。
用值传递,可以显示,只不过显示的都是我初始化时赋得值
public static extern int OMR_GetResultString( ref StringBuilder result1);
len = OMR_GetResultString(ref resultStr); //返回机器识别到的字符串长度,resultStr为机器识别到得字符串
我把这2个ref去掉就可以了。多谢了。