函数都是从Tw_ocr32.dll里调出来的!
  TW_Start(0,5,0,0);
  TW_CallBackAddress(ProgressStart,ProgressEnd, 0, ProgressStart);  //////
  TW_RecogFile(PChar('E:\TemOCR.bmp'), PChar('E:\TemOCR.TXT'), 0);
  TW_End;
在delphi里用上面四行代码就可以实现中文OCR了;但没显是进度条!它SDK文档是这样说的:这组回调函数用来在用户程序中显示识别进度,要求必须在同一个EXE或DLL模块中,系统通过Tw_Start中的HApplicationInstance参数来寻找该模块。函数成功返回TRUE,失败返回FALSE,返回FALSE将终止识别过程。 ERRCODE WINAPI TW_CallBackAddress(long Thocr_Callback_ProgressStart, long Thocr_Callback_ProgressFinish, long Thocr_Callback_ProgressSetStage, long Thocr_Callback_ProgressSetPerc);〖功能〗 如果Tw_Start中的HApplicationInstance参数为0,则可以通过本函数设置回调 函数的地址,主要用在VB中,因为VB的EXE文件无法导出(export)函数。
〖参数〗 四个参数分别为下边四个回调函数的地址。〖返回值〗ERRCODE 错误代码BOOL PASCAL EXPORT Thocr_Callback_ProgressStart (void);
BOOL PASCAL EXPORT Thocr_Callback_ProgressFinish (void);
BOOL PASCAL EXPORT Thocr_Callback_ProgressSetStage(WORD wStageNumber, LPSTR lpStageName);我怎样用TW_CallBackAddress??

解决方案 »

  1.   

    VB是这样用的!
    ---------
    Public Declare Function TW_CallBackAddress Lib "tw_ocr32.dll" (ByVal start As Long, ByVal finish As Long, ByVal stage As Long, ByVal percent As Long) As Long
    ---------
    Function ProgressStart() As Long
        ProgressForm.Show
        ProgressForm.Label1 = "正在调识别库"
        DoEvents
        ProgressStart = 1
    End FunctionFunction ProgressEnd() As Long
     Unload ProgressForm
     ProgressEnd = 1
    End FunctionFunction ProgressSetStage(ByVal wStageNumber As Integer, ByRef Name As Byte) As Long
     Dim StageName As Variant
     StageName = Array("读取图象", 版面分析, "倾斜校正", "识别", "后处理")
    ' Select Case wStageNumber
    '    Case 0
           ProgressForm.Label1 = "正在" & StageName(wStageNumber)
           ProgressSetStage = 1
    End FunctionFunction ProgressSetPerc(ByVal percent As Integer) As Long
     ProgressForm.Label2 = percent & "%"
     ProgressForm.ProgressBar1.Value = percent
     ProgressSetPerc = 1
    End Function
    ---------------------
    TW_CallBackAddress(AddressOf Progress.ProgressStart, AddressOf Progress.ProgressEnd, AddressOf Progress.ProgressSetStage, AddressOf Progress.ProgressSetPerc)
    --------------------
    在Delphi应该怎样写??
      

  2.   

    TW_CallBackAddress申明成如下形式:function TW_CallBackAddress(ProgressStart, ProgressEnd, ProgressSetStage, ProgressSetPerc: Pointer): Integer;  stdcall;  external tw_ocr32.dll';Thocr_Callback_ProgressStart、Thocr_Callback_ProgressFinish、Thocr_Callback_ProgressSetStage和ProgressSetPerc是要在你自己的程序中写的四个函数, 函数名是可以任意的。在你的程序执行了TW_CallBackAddress(Addr(Thocr_Callback_ProgressStart), Addr(Thocr_Callback_ProgressEnd), Addr(Thocr_Callback_ProgressSetStage), Addr(Thocr_Callback_ProgressSetPerc)); 之后,tw_Ord32.dll会在需要的时候主动调用(回调)这四个函数。
    function Thocr_Callback_ProgressStart(): Integer;
    begin
      ......
    end;function Thocr_Callback_ProgressFinish(): Integer;
    begin
      ......
    end;function Thocr_Callback_ProgressSetStage(wStageNumber: Word;  lpStageName: PChar): Integer;
    begin
      ......
    end;function Thocr_Callback_ProgressSetPerc(percent: Smallint): Integer;
    begin
      ......
    end;