unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 var
  Form1: TForm1;
  procedure IMG2BMP(filename : PChar); Stdcall;external 'E:\down\advocr\AdvOCR.dll' name 'IMG2BMP';
  function OcrInit : boolean; Stdcall;external 'E:\down\advocr\AdvOCR.dll' name 'OcrInit';
  procedure OcrDone; Stdcall;external 'E:\down\advocr\AdvOCR.dll' name 'OcrDone';
  function OCR_C(OCR_type,filename : PChar): PChar; Stdcall;external 'E:\down\advocr\AdvOCR.dll' name 'OCR_C';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d:string;
begin
a:='f:\q.jpg';
b:='f:\q.bmp';
c:='163_esales';
//  IMG2BMP(PChar(a));
        d:= StrPas(OCR_C('163_esales',PChar(b)));
memo1.Text:='证码识别值:'+d;
 end;
 end.才学调用dll,这个IMG2BMP(PChar(a));好像能成功。而ocr_c就没反应了,我找了别人一源程序,反复看都差不多。别人的有效果。而我的不行,这是为什么?我这样弄是正确的吗?烦请指点,谢谢了~~~

解决方案 »

  1.   


     var 
      Form1: TForm1; 
      procedure IMG2BMP(filename : PChar); Stdcall;external  'E:\down\advocr\AdvOCR.dll ' name  'IMG2BMP '; 
      function OcrInit : boolean; Stdcall;external  'E:\down\advocr\AdvOCR.dll ' name  'OcrInit '; 
      procedure OcrDone; Stdcall;external  'E:\down\advocr\AdvOCR.dll ' name  'OcrDone '; 
      function OCR_C(OCR_type,filename : PChar): PChar; Stdcall;external  'E:\down\advocr\AdvOCR.dll ' name  'OCR_C '; 
    implementation 
    {$R *.dfm} //对比一下区别吧。其他的我就暂时不看了。
    //动态库你最好是放在应用程序文件夹或是系统文件夹中,不要用绝对路径。 var 
      Form1: TForm1; implementation 
    {$R *.dfm}  procedure IMG2BMP(filename : PChar); Stdcall;external  'E:\down\advocr\AdvOCR.dll ' name  'IMG2BMP '; 
      function OcrInit : boolean; Stdcall;external  'E:\down\advocr\AdvOCR.dll ' name  'OcrInit '; 
      procedure OcrDone; Stdcall;external  'E:\down\advocr\AdvOCR.dll ' name  'OcrDone '; 
      function OCR_C(OCR_type,filename : PChar): PChar; Stdcall;external  'E:\down\advocr\AdvOCR.dll ' name  'OCR_C '; 
     
      

  2.   


       AdvOCR.dll 放在应用程序下,不必使用绝对路径。
        Function   PinPad_Reset:integer;stdcall;external 'pinpad.dll';
      

  3.   

    回楼上,我原来就是,我想调用是成功了,因为第一个IMG2BMP能正常运行,第二个却试了n天都不行~~~
      

  4.   

     d:= StrPas(OCR_C( '163_esales ',PChar(b))); 
     
    中的参数没有传对吧,两个都是PChar类型,而你第一个传的是string类型
      

  5.   

    估计不是调用的问题,而是逻辑的问题,比如 OCR 需要场境,而且需要初始化。
      

  6.   

    IMG2BMP 并不会生成一个BMP的文件啊!
      

  7.   

    OcrInit,OcrDone这2个函数是不是要调用的
    不要直接就说没有效果,先想想为什么.
    比如上面函数是否要调用,对照demo比比.
    看下OCR_C的返回值.
    还有一个重要的一点,你没看到这个函数返回的是pchar吗?
    是个指针,既然是指针就得分配内存?如果他给你分配这个内存谁会来释放呢?
    所以感觉你这个OCR_C函数会不会有问题.