http://down.cnzz.cn/info/30197.aspx 
这上面是一个验证码识别的引擎,提供了DLL,但我下载打开demo,例子程序运行失败 
我自己用vc6调用DLL 
  HMODULE hmydll=::LoadLibrary("OCR.DLL"); 
  MYDLLFUN *mydllfun; 
  lpformCodeImg OCRForumCodeImg = (lpformCodeImg)GetProcAddress(hmydll,"OCRForumCodeImg"); 
  lpCreateEngine CreateEngine = (lpCreateEngine)GetProcAddress(hmydll,"CreateEngine"); 
  lpCreateEngine FreeEngine = (lpFreeEngine)GetProcAddress(hmydll,"FreeEngine"); 
  if(OCRForumCodeImg != NULL && CreateEngine != NULL && FreeEngine != NULL) 
  { 
  void* h;char* code = "";int time; 
  CreateEngine(&h);byte m = -1; 
  if(OCRForumCodeImg(h,m,"","5.bmp",&code,time)) 
  AfxMessageBox(*code); 
  FreeEngine(&h); 
  } 
  ::FreeLibrary(hmydll); 
其中OCRForumCodeImg(h,m,"","5.bmp",&code,time)函数中,只要第三个参数不设置为"",那么程序运行就一定会崩溃 
我跟踪到dll源代码里发现过程procedure TOCRengine.RecogForumCodeImg中有  if (_PicFile <>'')and(_CodeUrl <>'')and(_BbsType <>0) then 
再往下跟踪,也没发现什么可疑之处,但肯定是在判断后面出了问题,希望高手帮我看看 
不是我非要用这个算法,网上实在找不到不要钱的了,我又完全不会用delphi,希望高手们指点指点. 
 
 

解决方案 »

  1.   

    OCRForumCodeImg(h,m,"","5.bmp",&code,time)这个参数m传的是什么?这要求是一个整形类型
    第三个参数是URl不允许为空,但是你传的是空。
      

  2.   

    回LS
    m没注意看,我看两个例子里都用的是-1我也就跟着用了
    反正我是打算自己发包申请到图片然后下载到本地,再调用这个库进行识别的,没想过用它的网络功能
    第三个URL根据例子,我猜测可能是验证码所在网页图片地址,反正我也用不着
    现在问题是:只要这个参数不为空,哪怕为" "程序运行也会崩溃,说明肯定有问题,但问题在哪就不知道了
    如果这个参数为空,程序执行正常,但什么也识别不出来,没有返回结果。
    5.bmp是我放在VC工程里的测试图片,应该是不需要另外加路径了
      

  3.   

      if (_PicFile <>'')and(_CodeUrl <>'')and(_BbsType <>0) then if((_PicFile != ""/*文件名*/) && (_CodeUrl != ""/*链接地址*/) && (_BbsType != 0/*论坛类别*/))//然后执行后面的代码
      

  4.   

    这我肯定看得懂,如果就为了这我怎么会来这里问呢
    关键是后面哪里有问题,我看了遍,好像后面链接地址变量都没什么问题,除非整个DLL存在结构性问题。
    现在就想问问大家哪里可能存在问题
      

  5.   

    你自己也说了第三个参数是URL,那就要符合URL的规范把你用idhttp去get个' ',一样报错的.只能说这个dll里面可能异常处理没做好
      

  6.   

    你自己也说了第三个参数是URL,那就要符合URL的规范把 你用idhttp去get个' ',一样报错的.只能说这个dll里面可能异常处理没做好
    ------------------------------------------------
    不是这个原因啦,如果说是我传的参数不能为" ",那么我传递一个正常的HTTP的URL也异常啊.
    而且我看VB的DEMO里也是传递了一个正常的URL,程序同样异常挂掉.
    delphi的DEOMO倒是没有挂掉,不过我也执行不出什么结果来.
    我估计有可能DLL设计过程中本来就有缺陷或问题