delphi 2009 怎么样调用DLL 我用delphi200写了一个DLL,再写一个调用程序,不管是用动态还是静态都报一个地址错误.
大家在delphi2009下怎么调用. 给段源码.谢谢.

解决方案 »

  1.   

    最好说得具体点
    在哪里报错?
    调用的时候应错的?
    dll也没错吧?
    释放的时候错的?
      

  2.   

    原来的代码当中出现的string要改为AnsiString,pchar要改为pansichar,char改为ansichar
      

  3.   

    不行呀.我试了.改成别的类型也不行.调用DLL里的一个文件COPY操作.
    function coyfl(fl1,fl2:pchar):boolean;
     begin
       copyfile(fl1,fl2,false);
       result :=false;
     end;这个是DLL里的过程.用EXE在调用过程中,没有COPY成功.释放的时候就报一个地址错误.
      

  4.   

    function coyfl(fl1,fl2:pchar):boolean;stdcall;
      

  5.   

    调用方的声明:
    function coyf1(fl1,fl2: PAnsiChar): boolean; external xxxdll;
      

  6.   

    上面所说的delphi 7下测试通过
    在delphi 2009 测试不行.拿delphi 2009重新编dll 也不行.DLL 内方法
    function coyfl(fl1,fl2:pchar):boolean; 
    begin 
      copyfile(fl1,fl2,false); 
      result :=false; 
    end;EXE内调用function coyf1(fl1,fl2: PAnsiChar): boolean; external xxxdll;  静态Tcoyfl = function coyf1(fl1,fl2: PAnsiChar): boolean   动态以上二种方法在2009 下调用都会出现地址错误.
      

  7.   


    function coyfl(fl1,fl2:pwidechar):boolean; 
    begin 
      copyfile(fl1,fl2,false); 
      result :=false; 
    end; 
     在 Delphi2009  下copyFIle  請用pwidechar
      

  8.   

    DLL调用我是做了一个测试COPY的DLL, 然后用EXE调用DLL完成COPYDLL内function 如下function coyfl(fl1,fl2:pwidechar):boolean;
     begin
       copyfile(fl1,fl2,false);
       result :=false;
     end;EXE 内调用过程如下
    procedure TForm1.Button1Click(Sender: TObject); //动态调用
    var
     DLLHandle: THandle;
     Func: Tcoyfl;
    begin
    try
    DLLHandle := LoadLibrary('ProT.dll');
    @Func := GetProcAddress(DLLHandle, 'coyfl1');
       if Func(pwidechar('c:\.txt'),pwidechar('c:\2.txt')) then //没有成功
          begin
            showmessage('OK');
          end;
    finally
     FreeLibrary(DLLHandle); ////  报出地址错误.
    end;
    end;
    错误为 Access violation at address 00000000 .read of address 000000
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject); //动态调用 
    var 
    DLLHandle: THandle; 
    Func: Tcoyfl; 
    begin 
    try 
    DLLHandle := LoadLibrary('ProT.dll');
    if dllHandle = INVALID_HANDLE_VALUE then Exit;//加载DLL失败 Func := Tcoyfl(GetProcAddress(DLLHandle, 'coyfl1' (*这里注意区分大小写*))); 
    if Not Assigned(Func) then Exit; //取得函数地址失败
      if Func(pwidechar('c:\.txt'),pwidechar('c:\2.txt')) then //没有成功 
          begin 
            showmessage('OK'); 
          end; 
    finally 
    FreeLibrary(DLLHandle); ////  报出地址错误. 
    end; 
    end; 
      

  10.   

    try (*放到LoadLibrary之后,并且是判断LoadLibrary成功之后*)
    DLLHandle := LoadLibrary('ProT.dll'); 
    if dllHandle = INVALID_HANDLE_VALUE then Exit;//加载DLL失败