Hi,
My environment:
- Win xp
- C#.NET
I have installed your gdtwain.dll and got the following trace output:
#GdTwain Log Start. Version: 501
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 1
-------------------
Start: OpenSource.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 1
-------------------
Start: OpenSourceManager.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 1
-------------------
DSM library loaded: C:\WINNT\TWAIN_32.DLL
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 1
-------------------
Entry point of the DSM found.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 1
-------------------
End: OpenSourceManager.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 3
-------------------
Start: SetAutoFeed.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
CAP_AUTOFEED. Result for Set False.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
End: SetAutoFeed.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
Start: SetXferMech.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
End: SetXferMech.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
End: OpenSource.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_GETCURRENT ->RC: TWRC_SUCCESS
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
::DS operation. DG: DG_IMAGE - DAT: DAT_IMAGELAYOUT - MSG: MSG_GET ->RC: TWRC_SUCCESS
-------------------
::DS operation. DG: DG_IMAGE - DAT: DAT_IMAGELAYOUT - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
Start: AcquireNative.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
Source: FUJITSU fi-5120Cdj
Manufacturer: FUJITSU
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_GETCURRENT ->RC: TWRC_SUCCESS
-------------------
Start: WaitForXfer.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_GETCURRENT ->RC: TWRC_SUCCESS
-------------------
Start: SetXferMech.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_SET ->RC: TWRC_SUCCESS
-------------------
End: SetXferMech.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
Start: EnableSource.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_USERINTERFACE - MSG: MSG_ENABLEDS ->RC: TWRC_SUCCESS
-------------------
End: EnableSource.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 5
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_EVENT - MSG: MSG_PROCESSEVENT ->RC: TWRC_DSEVENT CC: TWCC_SUCCESS
-------------------
MessageHook: MSG_XFERREADY.
RC: TWRC_DSEVENT
CC: TWCC_SUCCESS
State: 6
-------------------
Start: DoOneTransfer.
RC: TWRC_DSEVENT
CC: TWCC_SUCCESS
State: 6
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_GETCURRENT ->RC: TWRC_SUCCESS
-------------------
Start: NativeXferHandler.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 6
-------------------
::DS operation. DG: DG_IMAGE - DAT: DAT_IMAGENATIVEXFER - MSG: MSG_GET ->RC: TWRC_XFERDONE CC: TWCC_SUCCESS
-------------------
End: NativeXferHandler.
RC: TWRC_XFERDONE
CC: TWCC_SUCCESS
State: 7
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_CAPABILITY - MSG: MSG_GETCURRENT ->RC: TWRC_FAILURE CC: TWCC_CAPUNSUPPORTED
-------------------
::DS operation. DG: DG_IMAGE - DAT: DAT_EXTIMAGEINFO - MSG: MSG_GET ->RC: TWRC_SUCCESS
-------------------
Start: EndXfer.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 7
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_PENDINGXFERS - MSG: MSG_ENDXFER ->RC: TWRC_SUCCESS
-------------------
End: EndXfer.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 5
-------------------
End: DoOneTransfer.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 5
-------------------
End: ModalEventLoop.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 5
-------------------
End: WaitForXfer.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 5
-------------------
Start: DisableSource.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 5
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_USERINTERFACE - MSG: MSG_DISABLEDS ->RC: TWRC_SUCCESS
-------------------
End: DisableSource.
RC: TWRC_SUCCESS
CC: TWCC_SUCCESS
State: 4
-------------------
End: AcquireNative.
RC: TWRC_XFERDONE
CC: TWCC_SUCCESS
State: 4
-------------------
Start: CloseSource.
RC: TWRC_XFERDONE
CC: TWCC_SUCCESS
State: 4
-------------------
End: CloseSource.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
Start: CloseSourceForce.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_PENDINGXFERS - MSG: MSG_ENDXFER ->RC: TWRC_FAILURE CC: TWCC_BUMMER
-------------------
Result CloseSourceForce: DG_CONTROL - DAT_PENDINGXFERS - MSG_ENDXFER.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_PENDINGXFERS - MSG: MSG_RESET ->RC: TWRC_FAILURE CC: TWCC_BUMMER
-------------------
Result CloseSourceForce: DG_CONTROL - DAT_PENDINGXFERS - MSG_RESET.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
::DS operation. DG: DG_CONTROL - DAT: DAT_USERINTERFACE - MSG: MSG_DISABLEDS ->RC: TWRC_FAILURE CC: TWCC_BUMMER
-------------------
Result CloseSourceForce: DG_CONTROL - DAT_USERINTERFACE - MSG_DISABLEDS.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
Result CloseSourceForce: DG_CONTROL - DAT_IDENTITY - MSG_CLOSEDS.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
Result CloseSourceForce: DG_CONTROL - DAT_PARENT - MSG_CLOSEDSM.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
End: CloseSourceForce.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
Start: CloseSourceManager.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
End: CloseSourceManager.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
Start: UnloadSourceManager.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 4
-------------------
End: UnloadSourceManager.
RC: TWRC_FAILURE
CC: TWCC_BUMMER
State: 1
-------------------
#GdTwain Log Stop.
My code:
- Code: Select all
public void scanDocumentRegion()
{
gdTwainType = Type.GetTypeFromProgID(_gdTwainClassName);
gdTwainObject = Activator.CreateInstance(gdTwainType);
gdTwain = (Twain) gdTwainObject;
gdTwain.SetLicenseNumber(License.DemoLicenseConstants.LICENSE_DEMO_GD_TWAIN);
try
{
gdTwain.TwainSetHideUI(true);
gdTwain.TwainLogStart(@"c:\gdTwain.log");
if (gdTwain.TwainOpenSource(_sourceName))
{
Console.WriteLine("scanDocumentRegion(): Hide UI after --> {0}", gdTwain.TwainGetHideUI().ToString());
TwainPaperSize paperSize = gdTwain.TwainGetPaperSize();
gdTwain.TwainSetCurrentPixelType(TwainPixelType.TWPT_RGB);
gdTwain.TwainSetPaperSize(paperSize);
double nleft = 0;
double nTop = 0;
double nRight = 0;
double nBottom = 0;
if (gdTwain.TwainGetImageLayout(ref nleft, ref nTop, ref nRight, ref nBottom))
{
Console.WriteLine("scanDocumentRegion(): Image layout --> left={0}, top={1}, right={2}, bottom={3}",
nleft, nTop, nRight, nBottom);
nleft = nleft + 2;
nTop = nTop + 2;
nRight = nRight - 2;
nBottom = nBottom - 2;
gdTwain.TwainSetImageLayout(nleft, nTop, nRight, nBottom);
if (gdTwain.TwainIsAvailable())
{
if ((int) gdTwain.TwainGetState() >= 4)
{
gdTwain.TwainAcquireToGdPictureImage(0);
try
{
Array imageBytes = new byte[0];
int nBytesRead = imageBytes.Length;
gdTwain.SaveAsByteArray(ref imageBytes, ref nBytesRead, "usb", 0);
byte[] image = new byte[imageBytes.Length];
imageBytes.CopyTo(image, 0);
Console.WriteLine("Byte array: {0}", byteArrayConvertToString(image));
}
catch (Exception ex)
{
Console.WriteLine("scanDocumentRegion(): Exception --> {0}", ex.Message);
}
}
}
else
{
Console.WriteLine("scanDocumentRegion(): Scanner not available!");
}
}
else
{
{
Console.WriteLine("scanDocumentRegion(): TwainGetLastResultCode() --> {0} ",
gdTwain.TwainGetLastResultCode().ToString());
Console.WriteLine("scanDocumentRegion(): TwainGetLastConditionCode() --> {0} ",
gdTwain.TwainGetLastConditionCode().ToString());
}
}
}
else
{
Console.WriteLine("scanDocumentRegion(): Scanner not available --> source name={0}, scanner status={1}",
gdTwain.TwainGetCurrentSourceName(), gdTwain.TwainGetState());
}
gdTwain.TwainLogStop();
}
catch (Exception ex)
{
Console.WriteLine("scanDocumentRegion(): Exception --> {0}", ex.Message);
}
finally
{
gdTwain.TwainCloseSource();
gdTwain.TwainUnloadSourceManager();
gdTwain.TwainCloseSourceManager(0);
}
}
public string byteArrayConvertToString(byte[] byteArray)
{
string bitArray = "";
for (int i = 0; i < byteArray.Length; i++)
{
bitArray += byteArray[i];
}
return bitArray;
}
To reproduce the application crash I have closed the application before the scanning process has been finished since it needs time to convert the byte[] array to string (byteArrayConvertToString).
Thank you
Br,
ctn