+ -
当前位置:首页 → 问答吧 → 谁能帮我解释下这个汇编代码的意思???最好同时懂vb的~~

谁能帮我解释下这个汇编代码的意思???最好同时懂vb的~~

时间:2011-05-17

来源:互联网

Delphi(Pascal) code

 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);


说明:
上面声明的3个函数都是dll的内置函数,ocr—c这个函数 参数好像是2个字符串格式的,但是返回值是什么格式的我到现在没搞明白(vb的,我是学vb的) 现在这个asm里面阐述了这个函数如何调用和返回值转换成字符串的过程,但是我不懂反汇编,所有不知道什么意思,我想知道 如果用vb 如何调用这个ocr—c 并且吧结果转换成字符串?????

求高手指点下。。。。。

这个是delphi论坛一个朋友的回答==============
这个汇编代码其实很简单,就是标准的 stdcall 方式调用 dll 中的函数。

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

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

但是copymemory我不懂,也不知道他上面说的什么堆栈什么的是什么意思,希望高手能给我个vb调用和返回值转换字符串代码,拜托各位大哥帮帮我,谢谢了。

作者: ftlsisme   发布时间: 2011-05-17

函数ocr_c的具体功能我不知道,但是函数OCR_identify返回的应该是4个字节的字符串,而且这4个字节是函数ocr_c计算出来的。
至于用VB来实现调用和返回值转换字符串代码其实很简单,用地址方式传递字符串参数,然后用地址方式把字符串返回就OK了。

作者: XSFGaoVictor   发布时间: 2011-05-17

热门下载

更多