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
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
解决方案 »
- TYPE与STRING转换问题
- 为什么程序编译都通过了,可是执行时缺说找不到表呢?
- 请问大家DCOM和Socket有什麼區別?
- [C/S]谁能帮帮我啊 ~
- 有求这里的兄弟们,小弟的程序中需要发送邮件的功能.
- 求助?同在一个操作界面,为什么我第二次按保存时,就不能通过存储过程向数据库中写数据呢?
- 有谁能详细解释一下RSA加密方法的原理?
- 哪位有InstallShield 5.0 或以上的中文版本 或者是 Setup Factory 6.0 及以上正版!!
- MFC还是VCL?
- 请教一个线程执行的问题,燃美之急,50分送上...
- 用delphi实现清空access数据库中表的内容。
- DBGRIDEH上右键从粘贴板上粘贴文本
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代码我自己写也行,先在这里谢谢各位了
至于这个函数内部做了什么处理,没法知道,你要找到源码才可以
最后是取出返回值,看上去是个DWORD类型,4字节的
=====================================这个是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 拷贝到数组或者结构体里面就可以了。
=======================================就是不知道怎么做 求教
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怎么做呀??? 如何处理呀
将参数从后往前推入堆栈,然后call开始调用。调用完成返回一个指针,放在eax寄存器里面,指向一个4字节的地址。
你的问题应该去vb里问怎么实现
调用ocr_c,返回一个值,然后对这个返回值进行了chr处理,不知是不是?