注意事项:调试模式请把DLL和辅助文件程序运行的目录下,其他文件也设置好相应路径,否则会调试出错。
DLL一共4主个命令,3个辅助命令,可以应对各种情况。
1.loadcode:载入验证码
2.Recognition:识别
3.outitem:取项目名称
4.Writepic:保存图片
5.Recognitiond:另外一种识别,和识别1的区别是不需要传递指针参数。
6.yLength:返回识别结果长度。
7.tebie: 特殊方式处理图片时使用。
[in]:传入参数
[out]:接收参数
以下DLL对于整数型不需要用的就传递 0 ,文本不需要用的就传递 空文本。
文件说明:
ycode.dll主调用DLL,其他的为,辅助文件。
-----------------------------------------------------------------------------------
一般调用顺序为 loadcode - Recognition - Writepic
-----------------------------------------------------------------------------------
.DLL命令 loadcode, 整数型, "ycode.dll" 返回项目数
[in].参数 code, 整数型 1)验证码库字节集指针地址
[in].参数 Length, 整数型 2)指针长度
[in].参数 Address, 文本型 3)验证码库的路径
[in].参数 pass, 文本型 4)验证码库的密码
备注:1+2和3任意选一组就可以了.
4.输入相应的密码,没有密码就传递一个空文本就可以了.
VB申明:
Declare Function loadcode Lib "ycode.dll" Alias "loadcode" (ByVal code As Long, ByVal length As Long, ByVal address As String, ByVal pass As String) As Long
返回值
Long,返回项目个数。
-----------------------------------------------------------------------------------
.DLL命令 outitem, 文本型, "ycode.dll" 返回项目名称
[in].参数 no, 整数型 1) 项目序号
VB申明:
Declare Function outitem Lib "ycode.dll" Alias "outitem" (ByVal no As Long) As String
返回值
String,返回指定项目序号的项目名字。
-----------------------------------------------------------------------------------
.DLL命令 Recognition, 整数型, "ycode.dll" 返回识别结果内存指针
[in].参数 ItemNo, 整数型 1)项目号
[in].参数 picin, 整数型 2)图片内存指针地址
[in].参数 Length, 整数型 3)指针长度
[in].参数 Address1, 文本型 4)验证码网络路径
[in].参数 Address2, 文本型 5)验证码本地路径
[out].参数 lppicout, 整数型, 传址, 6)返回:图片指针
[out].参数 lpLength, 整数型, 传址, 7)返回:指针长度
[out].参数 cLength, 整数型, 传址, 8)返回:字符长度
备注:1,将按相应的序号载入相应识别库并识别,如只有一个项目那就传1。
2+3或4或5任选一个。传递验证码图片数据或网络地址或本地图片路径,如果都不传递的话将按识别库中的默认数据获取。
VB申明:
Declare Function Recognition Lib "ycode.dll" Alias "Recognition" (ByVal ItemNo As Long, ByVal picin As Long, ByVal Length As Long, ByVal Address1 As String, ByVal Address2 As String, lppicout As Long, lpLength As Long, cLength As Long) As Long
返回值
Long,返回识别结果字符指针。
-----------------------------------------------------------------------------------
.DLL命令 Writepic, 文本型, "ycode.dll" 返回图片长度
[in].参数 c, 文本型 1)保存路径
自动把图片转换成bmp格式并保存,便于在控件中显示
备注: c如果为空的话就保存到"c:\code.bmp"
VB申明:
Declare Function Writepic Lib "ycode.dll" (ByVal c As String) As Long
返回值
Long,返回图片长度。
-----------------------------------------------------------------------------------
.DLL命令 Recognitiond, 整数型, "ycode.dll" 返回识别结果内存指针
[in].参数 ItemNo, 整数型 1)项目号
[in].参数 picin, 整数型 2)图片内存指针地址
[in].参数 Length, 整数型 3)指针长度
[in].参数 Address1, 文本型 4)验证码网络路径
[in].参数 Address2, 文本型 5)验证码本地路径
备注:1,将按相应的序号载入相应识别库并识别。
2+3或4或5任选一个。传递验证码图片数据或网络地址或本地图片路径,如果都不传递的话将按识别库中的默认数据获取。
VB申明:
Declare Function Recognition Lib "ycode.dll" Alias "Recognition" (ByVal ItemNo As Long, ByVal picin As Long, ByVal Length As Long, ByVal Address1 As String, ByVal Address2 As String) As Long
返回值
Long,返回识别结果字符指针。
======================以上为调用方法==================
$dll = DllOpen ("ycode.dll")
$Pic_file = ""
$Locacode = @ScriptDir&"\17173.fc"
$a = DllCall($dll,"Int","loadcode","Int","0","Int","0","str",$Locacode,"str","");这里是加载验证码识别库
返回$a[0] 就是项目数
$b = DllCall($dll,"Str","outitem","Int","1");这个是返回项目名称
返回$b[0] 就是项目名称
$c = DllCall($dll,"int","Recognitiond","Int","1","Int","0","Int","0","str","","str",$Pic_file);识别
返回 $c[0] 就是识别出来的字符串指针
DllCall("ycode.dll","Int","Writepic","str","code.bmp") ;将验证码图片输出为BMP格式,方便GUI显示
$p = DllStructCreate("char Code[128]",$c[0])
MsgBox(0,"", DllStructGetData($p,"Code")&" 字符串指针:"&$c[0]&" 指针大小:"&DllStructGetSize($p)&" 错误:"&@Error)
DllClose($dll) ; 问题就出在这里,先关闭了DLL。。汗死 。。怎么弄他都是乱码。。指针是空的不乱才怪
$p = 0
以上是正确的调用方法
==========================================
所有文件在附件里面 |