Using the SDK with Borland Delphi
The following code shows how the Softek barcode Reader Toolkit can be used from Borland Delphi to extract barcode information from images and memory bitmaps.
Click here for some tips on using the toolkit with Delphi 2009.
Click here to download a Borland Delphi example in a zip file.
The following code was kindly provided by Marian Aldenh?vel of MBA Software-Consulting.
unit SoftekBarCode; { (c)2003 Marian Aldenh?vel MBA Software-Consulting Rosenhain 23 53123 Bonn marian@mba-software.de This unit dynamically imports the functions from the Softek Barcode Library. Usage: - Call InitLibrary from somewhere in your program before calling any of the functions. - See the documentation from Softek for the use of the actual functions. } interface uses Windows,SysUtils; type short=shortint; long=integer; PLong=^long; var stGetBitmapResolution:function():integer; stdcall; stSetBitmapResolution:function(newValue:integer):integer; stdcall; stGetDebugTraceFile:function():PChar; stdcall; stSetDebugTraceFile:function(lpszNewValue:PChar):PChar; stdcall; stGetLineJump:function():integer; stdcall; stSetLineJump:function(nNewValue:integer):integer; stdcall; stGetLowerRatio:function():double; stdcall; stSetLowerRatio:function(newValue:double):double; stdcall; stGetMinOccurrence:function():short; stdcall; stSetMinOccurrence:function(nNewValue:short):short; stdcall; stGetMultipleRead:function():bool; stdcall; stSetMultipleRead:function(bNewValue:bool):bool; stdcall; stGetNoiseReduction:function():short; stdcall; stSetNoiseReduction:function(nNewValue:short):short; stdcall; stGetPageNo:function():short; stdcall; stSetPageNo:function(nNewValue:short):short; stdcall; stGetPrefOccurrence:function():short; stdcall; stSetPrefOccurrence:function(nNewValue:short):short; stdcall; stGetQuietZoneSize:function():short; stdcall; stSetQuietZoneSize:function(nNewValue:short):short; stdcall; stGetRotation:function():short; stdcall; stSetRotation:function(nNewValue:short):short; stdcall; stGetUpperRatio:function():double; stdcall; stSetUpperRatio:function(newValue:double):double; stdcall; stGetReadCode39:function():bool; stdcall; stSetReadCode39:function(bNewValue:bool):bool; stdcall; stGetReadEAN13:function():bool; stdcall; stSetReadEAN13:function(bNewValue:bool):bool; stdcall; stGetReadEAN8:function():bool; stdcall; stSetReadEAN8:function(bNewValue:bool):bool; stdcall; stGetReadUPCA:function():bool; stdcall; stSetReadUPCA:function(bNewValue:bool):bool; stdcall; stGetReadUPCE:function():bool; stdcall; stSetReadUPCE:function(bNewValue:bool):bool; stdcall; stGetShowCheckDigit:function():bool; stdcall; stSetShowCheckDigit:function(bNewValue:bool):bool; stdcall; stGetReadCode128:function():bool; stdcall; stSetReadCode128:function(bNewValue:bool):bool; stdcall; stGetCode39NeedStartStop:function():bool; stdcall; stSetCode39NeedStartStop:function(bNewValue:bool):bool; stdcall; stGetReadCode25:function():bool; stdcall; stSetReadCode25:function(bNewValue:bool):bool; stdcall; stGetColorThreshold:function():short; stdcall; stSetColorThreshold:function(nNewValue:short):short; stdcall; stGetBarString:function(index:short):PChar; stdcall; stScanBarCode:function(FileName:PChar):short; stdcall; stScanBarCodeFromBitmap:function(hBitmap:long):short; stdcall; stGetBarStringType:function(index:short):PChar; stdcall; stGetBarStringPos:function(nBarCode:short;var pTopLeftX,pTopLeftY,pBotRightX,pBotRightY:Long):short; stdcall; stSetScanRect:function(TopLeftX,TopLeftY,BottomRightX,BottomRightY:Long;MappingMode:short):bool; stdcall; stGetReadPatchCodes:function():bool; stdcall; stSetReadPatchCodes:function(bNewValue:bool):bool; stdcall; stSaveBitmap:function(hBitmap:Long;strFilePath:PChar):bool; stdcall; function stGetErrorString(ErrorCode:short):string; procedure InitLibrary; procedure DoneLibrary; type ESoftekBarCodeError=class(Exception); implementation function stGetErrorString(ErrorCode:short):string; begin case ErrorCode of -1:Result:='Error opening file'; -2:Result:='File is Multi Plane'; -3:Result:='Invalid number of bits per sample'; -4:Result:='Memory allocation error'; -5:Result:='Invalid TIF photometric value'; else Result:=Format('Unknown error %d',[ErrorCode]); end; end; var LibraryHandle:THandle=0; procedure InitLibrary; function DoGetProcAdress(aName:string):pointer; begin Result:=GetProcAddress(LibraryHandle,PChar(aName)); if Result=NIL then RaiseLastOSError; end; begin if LibraryHandle<>0 then exit; LibraryHandle:=LoadLibrary('SoftekBarCode.dll'); if LibraryHandle=0 then RaiseLastOSError; @stGetBitmapResolution:=DoGetProcAdress('stGetBitmapResolution'); @stSetBitmapResolution:=DoGetProcAdress('stSetBitmapResolution'); @stGetDebugTraceFile:=DoGetProcAdress('stGetDebugTraceFile'); @stSetDebugTraceFile:=DoGetProcAdress('stSetDebugTraceFile'); @stGetLineJump:=DoGetProcAdress('stGetLineJump'); @stSetLineJump:=DoGetProcAdress('stSetLineJump'); @stGetLowerRatio:=DoGetProcAdress('stGetLowerRatio'); @stSetLowerRatio:=DoGetProcAdress('stSetLowerRatio'); @stGetMinOccurrence:=DoGetProcAdress('stGetMinOccurrence'); @stSetMinOccurrence:=DoGetProcAdress('stSetMinOccurrence'); @stGetMultipleRead:=DoGetProcAdress('stGetMultipleRead'); @stSetMultipleRead:=DoGetProcAdress('stSetMultipleRead'); @stGetNoiseReduction:=DoGetProcAdress('stGetNoiseReduction'); @stSetNoiseReduction:=DoGetProcAdress('stSetNoiseReduction'); @stGetPageNo:=DoGetProcAdress('stGetPageNo'); @stSetPageNo:=DoGetProcAdress('stSetPageNo'); @stGetPrefOccurrence:=DoGetProcAdress('stGetPrefOccurrence'); @stSetPrefOccurrence:=DoGetProcAdress('stSetPrefOccurrence'); @stGetQuietZoneSize:=DoGetProcAdress('stGetQuietZoneSize'); @stSetQuietZoneSize:=DoGetProcAdress('stSetQuietZoneSize'); @stGetRotation:=DoGetProcAdress('stGetRotation'); @stSetRotation:=DoGetProcAdress('stSetRotation'); @stGetUpperRatio:=DoGetProcAdress('stGetUpperRatio'); @stSetUpperRatio:=DoGetProcAdress('stSetUpperRatio'); @stGetReadCode39:=DoGetProcAdress('stGetReadCode39'); @stSetReadCode39:=DoGetProcAdress('stSetReadCode39'); @stGetReadEAN13:=DoGetProcAdress('stGetReadEAN13'); @stSetReadEAN13:=DoGetProcAdress('stSetReadEAN13'); @stGetReadEAN8:=DoGetProcAdress('stGetReadEAN8'); @stSetReadEAN8:=DoGetProcAdress('stSetReadEAN8'); @stGetReadUPCA:=DoGetProcAdress('stGetReadUPCA'); @stSetReadUPCA:=DoGetProcAdress('stSetReadUPCA'); @stGetReadUPCE:=DoGetProcAdress('stGetReadUPCE'); @stSetReadUPCE:=DoGetProcAdress('stSetReadUPCE'); @stGetShowCheckDigit:=DoGetProcAdress('stGetShowCheckDigit'); @stSetShowCheckDigit:=DoGetProcAdress('stSetShowCheckDigit'); @stGetReadCode128:=DoGetProcAdress('stGetReadCode128'); @stSetReadCode128:=DoGetProcAdress('stSetReadCode128'); @stGetCode39NeedStartStop:=DoGetProcAdress('stGetCode39NeedStartStop'); @stSetCode39NeedStartStop:=DoGetProcAdress('stSetCode39NeedStartStop'); @stGetReadCode25:=DoGetProcAdress('stGetReadCode25'); @stSetReadCode25:=DoGetProcAdress('stSetReadCode25'); @stGetColorThreshold:=DoGetProcAdress('stGetColorThreshold'); @stSetColorThreshold:=DoGetProcAdress('stSetColorThreshold'); @stGetBarString:=DoGetProcAdress('stGetBarString'); @stScanBarCode:=DoGetProcAdress('stScanBarCode'); @stScanBarCodeFromBitmap:=DoGetProcAdress('stScanBarCodeFromBitmap'); @stGetBarStringType:=DoGetProcAdress('stGetBarStringType'); @stGetBarStringPos:=DoGetProcAdress('stGetBarStringPos'); @stSetScanRect:=DoGetProcAdress('stSetScanRect'); @stGetReadPatchCodes:=DoGetProcAdress('stGetReadPatchCodes'); @stSetReadPatchCodes:=DoGetProcAdress('stSetReadPatchCodes'); @stSaveBitmap:=DoGetProcAdress('stSaveBitmap'); end; procedure DoneLibrary; begin if LibraryHandle=0 then exit; if not FreeLibrary(LibraryHandle) then RaiseLastOSError; stGetBitmapResolution:=NIL; stSetBitmapResolution:=NIL; stGetDebugTraceFile:=NIL; stSetDebugTraceFile:=NIL; stGetLineJump:=NIL; stSetLineJump:=NIL; stGetLowerRatio:=NIL; stSetLowerRatio:=NIL; stGetMinOccurrence:=NIL; stSetMinOccurrence:=NIL; stGetMultipleRead:=NIL; stSetMultipleRead:=NIL; stGetNoiseReduction:=NIL; stSetNoiseReduction:=NIL; stGetPageNo:=NIL; stSetPageNo:=NIL; stGetPrefOccurrence:=NIL; stSetPrefOccurrence:=NIL; stGetQuietZoneSize:=NIL; stSetQuietZoneSize:=NIL; stGetRotation:=NIL; stSetRotation:=NIL; stGetUpperRatio:=NIL; stSetUpperRatio:=NIL; stGetReadCode39:=NIL; stSetReadCode39:=NIL; stGetReadEAN13:=NIL; stSetReadEAN13:=NIL; stGetReadEAN8:=NIL; stSetReadEAN8:=NIL; stGetReadUPCA:=NIL; stSetReadUPCA:=NIL; stGetReadUPCE:=NIL; stSetReadUPCE:=NIL; stGetShowCheckDigit:=NIL; stSetShowCheckDigit:=NIL; stGetReadCode128:=NIL; stSetReadCode128:=NIL; stGetCode39NeedStartStop:=NIL; stSetCode39NeedStartStop:=NIL; stGetReadCode25:=NIL; stSetReadCode25:=NIL; stGetColorThreshold:=NIL; stSetColorThreshold:=NIL; stGetBarString:=NIL; stScanBarCode:=NIL; stScanBarCodeFromBitmap:=NIL; stGetBarStringType:=NIL; stGetBarStringPos:=NIL; stSetScanRect:=NIL; stGetReadPatchCodes:=NIL; stSetReadPatchCodes:=NIL; stSaveBitmap:=NIL; end; initialization finalization DoneLibrary; end.