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
解决方案 »
- 请教clientsocket与serversocket的重连接疑问
- 问一个不太相关的问题,让标题栏弹出菜单的快捷键是什么?
- 装的组件怎么卸载??
- Application.MessageBox的关闭问题
- 如何提取字符串中的部分字符串,例如提取'33 23 43'中的 '33' ,'23' ,'43' 。
- 关于ADO...
- TDBGrid控件里的列怎樣與Combobox聯系起來?也就是在TDBGrid控件里的列怎樣才能有下拉列表選擇?請幫忙
- ***小题目难倒众好汉:Delphi能制作自定义组件或ActiveX控件吗?*****
- 怎么来判断dbgrid控件中是不是有纪录被选中?
- ==== 如何获取软驱的状态 ==(是否有软盘)
- 用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处理,不知是不是?