dll函数说明
long Scan(char *ipath,long Imagetype,long isCompress,long bright,long contrast,
          RECT *ScanRgn,long ScanDPI,long npara)
ScanRgn 设置扫描区域的RECT结构,我在delphi 里这样调用:
function Scan(path:string;ImageType:longint; isCompress:longint;bright:longint;
  conntrast:longint;newrect:Trect;scandpi:longint;nParam:longint):longint;stdcall;
  far;external 'UnisDll32.dll' name 'Scan';

procedure TForm1.Button1Click(Sender: TObject);
var  newrect:Trect;
begin
     
    newrect.Left:=0;
    newrect.Top:=0;
    newrect.Right:=60;
    newrect.Bottom:=200;
      Scan('c:\\zp.jpg',1,0,0,0,newrect,100,70);
end;执行后,提示提“invalid float point operation”如何解决?

解决方案 »

  1.   

    声明有问题,应该这样声明
    function Scan(path:PChar;ImageType:longint; isCompress:longint;bright:longint; 
      conntrast:longint;var newrect:Trect;scandpi:longint;nParam:longint):longint;stdcall; 
      external 'UnisDll32.dll' name 'Scan'; 
      

  2.   

    声明有问题,应该这样声明 
    function Scan(path:PChar;ImageType:longint; isCompress:longint;bright:longint;  
      conntrast:longint;var newrect:Trect;scandpi:longint;nParam:longint):longint;stdcall;  
      external 'UnisDll32.dll' name 'Scan'; 
    这样声明,我也试过,同样的出错提示
      

  3.   

    你的rect传错了
    应该传指针进去。
    Scan(
    'c:\\zp.jpg',
    1,0,0,0,
    @newrect,100,70); 
    或者定义指针
      

  4.   

    Scan('c:\\zp.jpg',1,0,0,0,@newrect,100,70); 试过,同样的出错提示
    定义指针function Scan(path:string;ImageType:longint; isCompress:longint;bright:longint; 
      conntrast:longint;newrect:Pointer;scandpi:longint;nParam:longint):longint;stdcall; 
      far;external 'UnisDll32.dll' name 'Scan'; 还是同样的出错提示
      

  5.   

    vb的例子
    ttribute VB_Name = "Module1"
    Option Explicit
    Type RECT
        left As Long
        top As Long
        right As Long
        bottom As Long
    End Type'Declare Function Scan Lib "UnisDll31.dll" (ByVal Path As String, ByVal ImageType As Long, ByVal Bright As Long, ByVal left As Long, ByVal right As Long, ByVal top As Long, ByVal bottom As Long, ByVal dpi As Long, ByVal time As Long) As Long
    Declare Function Scan Lib "UnisDll32.dll" (ByVal Path As String, ByVal ImageType As Long, ByVal Compress As Long, ByVal Bright As Long, ByVal Contrast As Long, ByRef ScanRgn As RECT, ByVal dpi As Long, ByVal Param As Long) As LongDeclare Function SelectScanner Lib "UnisDll32.dll" (ByVal Source As String) As LongDeclare Function EnConnect Lib "UnisDll32.dll" (ByVal Name As String) As LongDeclare Function DisConnect Lib "UnisDll32.dll" () As Long.....
     Dim Path As String
        Dim a As Long
        Dim b As Long    Dim ScanRgn As RECT
        
        ScanRgn.top = 0
        ScanRgn.left = 0
        ScanRgn.right = 150
        ScanRgn.bottom = 100
        
        a = EnConnect("SDK Program")
        If (a > 0) Then
        Path = "c:\\TestSDK.bmp"
        a = Scan(Path, 2, 0, 0, 0, ScanRgn, 150, 60)
        b = DisConnect()
        End If
      

  6.   

    传指针
    var
     pRect :^Rect;Scan('c:\\zp.jpg',1,0,0,0,pRect,100,70); 
    如果不行的话再试试
    Scan('c:\\zp.jpg',1,0,0,0,pRect^,100,70); 
    定义指针function Scan(path:string;ImageType:longint; isCompress:longint;bright:longint;  
      conntrast:longint;var newrect:Pointer of TRect;scandpi:longint;nParam:longint):longint;stdcall;  
      far;external 'UnisDll32.dll' name 'Scan';如果VB中定义是byRef 那么就不能用@Addr来传递指针
      

  7.   

    记着pRect 用之前
    1.要New
    2.或者getmem
    3.或者指向一个Trect变量
    用完后要相应的1
    1.dispose
    2.或者freemem
      

  8.   

    function Scan(path:pchar;ImageType:longint; isCompress:longint;bright:longint; 
      conntrast:longint;newrect:Trect;scandpi:longint;nParam:longint):longint;stdcall; 
      far;external 'UnisDll32.dll' name 'Scan'; 把path的类型换成pchar看看