function OcrInit:boolean;stdcall ; external 'AdvOCR'  ;
 procedure OcrDone ;stdcall;external 'AdvOCR';         // Destroy
 procedure  OCR_C(var picType:string;var picName:string);stdcall;external 'AdvOCR'; function  OCR_identify (picName,types:string):string;
var
  u1,u2,u3,u4:byte;
begin
  asm
    push picName
    push types
    call ocr_c
    xor ecx,ecx
    mov cl,byte ptr [eax]
    mov u1,cl
    mov cl,byte ptr[eax+1]
    mov u2,cl
    mov cl,byte ptr[eax+2]
    mov u3,cl
    mov cl,byte ptr[eax+3]
    mov u4,cl
  end;
result:=chr(u1)+chr(u2)+chr(u3)+chr(u4);
end; 调用: b:= 'alibaba';//库中一种识别类型
      a:=图片;
 edit1.Text:= OCR_identify(a,b);RT

解决方案 »

  1.   

    主要是调用OCR_C这个函数,其他的都是把返回值处理返回。
      

  2.   

    function  OCR_identify (picName,types:string):string;
    var
      u1,u2,u3,u4:byte;
    begin
      asm
        push picName
        push types
        call ocr_c
        xor ecx,ecx
        mov cl,byte ptr [eax]
        mov u1,cl
        mov cl,byte ptr[eax+1]
        mov u2,cl
        mov cl,byte ptr[eax+2]
        mov u3,cl
        mov cl,byte ptr[eax+3]
        mov u4,cl
      end;
    result:=chr(u1)+chr(u2)+chr(u3)+chr(u4);
    end这段我完全看不懂,我想知道,他到底是对picName,types 2个参数 做了什么,什么连怎么调用dll函数都没发现,唉,更别提调用上面的dll并处理返回值 ,我是学vb的,我想用vb调用这个dll,但是我不知道参数是什么,好不容易用各种引擎找了2天才找到了这个文章,想请各位大大,帮我分析下,处理过程,vb代码我自己写也行,先在这里谢谢各位了
      

  3.   

    你这贴的代码只是调用了函数ocr_c,有2个字符参数picName和types
    至于这个函数内部做了什么处理,没法知道,你要找到源码才可以
    最后是取出返回值,看上去是个DWORD类型,4字节的
      

  4.   

    这个怪我,我忘记说了这个ocr—c 是一个dll的内建函数(就像sendmessage),不需要知道过程,这个东西返回的就是图片识别后的结果我现在就是不明白 这个ocr——c的参数是什么,反正直接用字符串参数调用 不成功,所有我想知道上面的汇编代码到底做什么的??
    =====================================这个是vb板块开的帖子的回复,完全是我的意思=====
    帖子地址http://topic.csdn.net/u/20110516/22/921fc3a7-0ed8-4a57-a548-435398b2d000.html?seed=1757899171&r=73362135#r_73362135
    这个汇编代码其实很简单,就是标准的 stdcall 方式调用 dll 中的函数。将参数从后往前推入堆栈,然后call开始调用。调用完成返回一个指针,放在eax寄存器里面,指向一个4字节的地址。VB要调用的话很简单,用 CopyMemory 拷贝到数组或者结构体里面就可以了。
    =======================================就是不知道怎么做 求教
      

  5.   


     
    Public Declare Sub IMG2BMP Lib "E:\down\advocr\AdvOCR.dll" Alias "IMG2BMP" (filename As Any)
    Public Declare Function OcrInit Lib "E:\down\advocr\AdvOCR.dll" Alias "OcrInit" () As Boolean
    Public Declare Sub OcrDone Lib "E:\down\advocr\AdvOCR.dll" Alias "OcrDone" ()
    Public Declare Function OCR_C Lib "E:\down\advocr\AdvOCR.dll" Alias "OCR_C" (OCR_type As String, filename As String) As String  
    '声明部分是我根据delphi那段代码推测出来的不知道是否正确StrSSS=OCR_C("alibaba",app.path & "\1.bmp") 
    text1.text=strsss结果text1 为空白,也就是说没有任何字符,我用这个软件的demo识别这个bmp图像是完全正确的识别出来了,也就是说 我上面的调用方式不正确 或者(经过这今天你们的回答推测) 返回值需要处理才能行。当然也有可能我的dll声明也存在错误??? 我是根据delphi推测的求高手指点
    VB怎么做呀??? 如何处理呀
      

  6.   

    那个回复已经说的很清楚了
    将参数从后往前推入堆栈,然后call开始调用。调用完成返回一个指针,放在eax寄存器里面,指向一个4字节的地址。
    你的问题应该去vb里问怎么实现
      

  7.   

    猜可能是
    调用ocr_c,返回一个值,然后对这个返回值进行了chr处理,不知是不是?