求高手把这个dephi 掺杂汇编 翻译成vb?或者解释上意思也行,感谢

求高手把这个dephi 掺杂汇编 翻译成vb??或者解释下意思也行,感谢!
求高手把这个dephi 掺杂汇编 翻译成vb??或者解释下意思也行,感谢!

 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

------解决方案--------------------
引用:
引用:

这个汇编代码其实很简单,就是标准的 stdcall 方式调用 dll 中的函数。

将参数从后往前推入堆栈,然后call开始调用。调用完成返回一个指针,放在eax寄存器里面,指向一个4字节的地址。

VB要调用的话很简单,用 CopyMemory 拷贝到数组或者结构体里面就可以了。


这个,大哥,能麻烦你给我写个vb的调用代码吗?不是我懒……

没有你的库,怎么帮你写?
------解决方案--------------------

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        ; stdcall调用, 此处相当于 ocr_c(types, prcName); 所以说上边参数命名很迷惑
    xor ecx,ecx            ;
    mov cl,byte ptr [eax]     ;因为call ocr_c后返回的结果在eax,看上下文应该是返回一个指针,下面几句的意思是将指针指向的地址随后的四个字节的值分别存放到u1到u4    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);  将u1到u4四个ascii码转换成4个字符,然后联成字符串,然后返回result。 result在delphi中比较特殊,代表函数的返回值
end;

 

调用: b:= 'alibaba';//库中一种识别类型
      a:=图片;
 edit1.Text:= OCR_identify(a,b);    // 这个意思就是将调用ocr_identify后的字符串显示在窗口的text输入框中