EZTwain의 BARCODE_Recognize 기능 사용 경험이있는 사람이 있습니까?클라이언트 PC에서 AccessViolationException 받기
Dosadi EZTwain 라이브러리를 사용하여 스캔 한 이미지의 바코드를 인식 할 때 내 프로그램에 AccessViolationException
이 표시되는 이유가 궁금합니다.
이 프로그램은 개발자 환경에서 완벽하게 실행되므로 클라이언트 PC에서 실행될 때 문제의 원인을 정확히 추적하는 데 어려움을 겪고 있습니다.
필자는 ildasm.exe 프로그램을 사용하여 바코드 인식 유틸리티 클래스의이 방법에서 예외가 발생한 것으로 밝혀졌습니다.
편집
: 그것은 우리의 사용자가 관리자로 설정되지 함께 할 수있는 아무것도 할 수 있다면 궁금하네요? admin으로 여기에서 실행하는 데 전혀 문제가 없으므로이 GetBarcode 메서드를 처음 호출 할 때 예외가 발생합니다.편집 :이 문제를 추적하는 데 도움이되는 다른 사람이 내 코드에서 볼 필요가 있습니까?
오류가 발생한 ildasm은 다음과 같습니다. 첫 번째 매개 변수 "image"인 IL_00bb : ldloc.3에 오류가 있습니다.
//000053: count = EZTwain.BARCODE_Recognize(image, -1, -1);
IL_00bb: ldloc.3
IL_00bc: ldc.i4.m1
IL_00bd: ldc.i4.m1
IL_00be: call int32 Dosadi.EZTwain.EZTwain/*02000005*/::BARCODE_Recognize(native int,
int32,
int32) /* 060001E4 */
IL_00c3: stloc.1
GetBarcode
public static string GetBarcode(Bitmap bImage, out BarcodeType barcodeType)
{
barcodeType = BarcodeType.NotBarcode;
string selectedBarcode = null;
int count = 0;
IntPtr hImage = IntPtr.Zero, image = IntPtr.Zero;
List<string> barcodes = new List<string>();
try
{
try
{
if (bImage.Width == 0 || bImage.Height == 0)
{
return null;
}
hImage = bImage.GetHbitmap();
if (hImage == IntPtr.Zero)
{
return null;
}
image = EZTwain.DIB_FromBitmap(hImage, IntPtr.Zero);
}
catch (Exception ex)
{
logger.LogException(LogLevel.Debug,
"Exception in GetBarcode(): inner try-catch block", ex);
throw;
}
finally
{
if (hImage != IntPtr.Zero)
DeleteObject(hImage);
}
EZTwain.BARCODE_SetDirectionFlags(-1);
count = EZTwain.BARCODE_Recognize(image, -1, -1);
UtilDebug("Found {0} barcodes in image on first attempt.", count);
for (int i = 0; i < count; i++)
{
barcodes.Add(EZTwain.BARCODE_Text(i));
}
foreach (string code in barcodes)
{
UtilDebug("Processing barcode \"{0}\".", code);
if (ProcessBarcodeType(code) == BarcodeType.CoversheetBarcode || ProcessBarcodeType(code) == BarcodeType.RegularBarcode)
{
barcodeType = ProcessBarcodeType(code);
selectedBarcode = code;
UtilDebug("SelectedBarcode set to \"{0}\".", code);
break;
}
}
}
catch (Exception ex)
{
logger.LogException(LogLevel.Debug, "Exception in GetBarcode(): outer try-catch block", ex);
throw;
}
finally
{
if (image != IntPtr.Zero)
EZTwain.DIB_Free(image);
barcodes.Clear();
}
//Find one that is an ASI barcode before return
return selectedBarcode;
}
다른 의견에서 HDIB를 만드는 방식을 이미 언급 한 것 같지만, 제 질문에 대한 질문이 있은 후에도 도움을 주신 것에 대해 감사 드리고 싶습니다. eztwain.com에서 3.43 버전으로 업그레이드 할 수 있는지 확인해야한다고 생각 하긴하지만, 3.30 버전으로 빌드 된 우리 제품과 호환되는지 아직 모르겠다. 내 생각에 모든 고객 시스템의 새 버전. – Zack
메시지를 보낼 수있는 방법이 있는지 모르겠지만, 갑자기 똑같은 문제가 다시 발생하고 Dosadi 로그가 새 질문에 대한 오류에 대한 자세한 정보와 함께 표시됩니다. http://stackoverflow.com/questions/25895706/client-pc-suddenly-getting-accessviolationexception-using-eztwain – Zack