函数int WINAPI ScanImage(char* pchFilePath)
功能:扫描图片。
参数:pchFilePath为存放扫描后得到的图像路径名(绝对路径)。
返回:0 识别成功;1 扫描发生错误;2 用户输入的文件路径名不符合要求。这是C里面的函数,动态库名为idcarddll.dll,如何改写成delphi的函数。
并且如何调用(如果你会,一定告诉我)。
先谢谢了。

解决方案 »

  1.   

    UP
    参见《Delphi5开发者指南》第9章
      

  2.   

    int WINAPI ScanImage(char* pchFilePath)ScanImage(pchFilePath:pchar):integer
      

  3.   

    function scanimage(pchFilePath:pchar):integer;stdcall;external 'idcarddll.dll';
    if scanimage(pchar('e:\新建文件夹(3)'))=0 then这样不对吗?应该怎么写?为什么?
      

  4.   

    我这里没delphi,可能细微语法有点错误:
    静态声明:
    function ScanImage(pchFilePath:pchar):smallint;stdcall import 'idcarddll.dll';
    动态调用:
    function ScanImage(pchFilePath:pchar):smallint;
    type
    tmyfun=function(p:pchar);smallint;stdcall;
    var
    h:cardinal;
    fun:tmyfun;
    begin
      result:=4;//如果找不到idcarddll.dll就返回4
      h:=loadlibrary(hinstance,'idcarddll.dll');
      if h=invalid_handle then exit;
      result:=5//如果找不到scanimage入口地址,就返回5
      fun:=getprocaddress(h,'ScanImage');
      if fun=nil then exit;
      result:=fun(pchFilePath);//真实返回值
    end;
      

  5.   

    动态调用:
    function ScanImage(pchFilePath:pchar):smallint;
    type
    tmyfun=function(p:pchar);smallint;stdcall;
    var
    h:cardinal;
    fun:tmyfun;
    begin
      result:=4;//如果找不到idcarddll.dll就返回4
      h:=loadlibrary(hinstance,'idcarddll.dll');
      try
      if h=invalid_handle then exit;
      result:=5//如果找不到scanimage入口地址,就返回5
      fun:=getprocaddress(h,'ScanImage');
      if fun=nil then exit;
      result:=fun(pchFilePath);//真实返回值
      finally
      freelibrary(h);//一定要加上这个。
      end;
    end;
      

  6.   

    这样声明:
    function ScanImage(char* pchFilePath): integer external idcarddll.dll'name'ScanImage'
    你就可以在Delphi上使用了!!!
      

  7.   

    这样声明:
    function ScanImage(char* pchFilePath): integer; external idcarddll.dll'name'ScanImage'
    你就可以在Delphi上使用了!!!
      

  8.   

    你可以找一下关于dll的调用的问题,一种是静态调用,另一种则是动态调用
    这个方面的内容很多的呀。
      

  9.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=1417437帮忙
      

  10.   

    Reply  tied(一无是处/无法释怀)
    关键是如何使用?----------------------------------------------
    这样声明:
    function ScanImage(char* pchFilePath): integer; external idcarddll.dll'name'ScanImage'
    你就可以在Delphi上使用了!!!
    例如假设你的C drive有个123的folder:
    .......
    var
      form1: Tform1;
      function ScanImage(char* pchFilePath): integer; external idcarddll.dll'name'ScanImage'implementationprocedure Tform1.FormClick(Sender: TObject);
    var
      i: integer;
    begin
      i := ScanImage(Pchar('C:\123'));
    end;
    end.
      

  11.   

    楼上的有QQ吗?
    动态库不可更改,因为我使用的上SDK,所以你的声明方法行不通。
    我的方法是这样写的,但是总是不能定位输入点?function scanimage(pchFilePath:pchar):integer;stdcall;external 'idcarddll.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    var i : integer;
    begin
       i:=scanimage(pchar('E:\ocr_demo'))
    end;
      

  12.   

    用dasm把dll给拆开,看看有几个函数,都是怎么回事?
    那个函数的帮助是怎么写的?
      

  13.   

    function ScanImage(pchFilePath:string):integer;stdcall;external 'idcarddll.dll';procedure TForm1.Button1Click(Sender: TObject);
    begin
       edit1.text:='e:\ocr_demo\zp.jpg';
       scanimage(edit1.text);
    end;调用C的动态库一定要区分大小写,如果错了肯定找不到入口。
    在C里面的指针(如此SDK),不一定在D中就一定是指针。
    问题终于搞定,但是这分怎么分配呢?