DELPHI做的一个DLL,此DLL中还调用了另一个DLL,现在在DELPHI中动态调用时,必须是和EXE在同一目录下才可以,DLL放在其它目录下就不能调用?请问怎么解决??(两个DLL是在同一目录下的)

解决方案 »

  1.   

    type
    TXXX =Function (xx:string):Integer;stdcall;var
    FHandle:THandle;
    begin
    FHandle:=LoadLibrary('c:\yourdll.dll'));
    .....
    end;
      

  2.   

    现在的情况是,EXE调用的时候和DLL不在一个目录下面,我在程序里指定了路径也不行
      

  3.   

    dlla调用dllb
    程序调用dlla时要指路径
    dlla调用dllb时也要指路径
      

  4.   

    建议楼主贴上代码看看,还有,不行,到底是怎么个不行法,说清楚,是编译错误,还是运行时错误呢?
    另外像
    LoadLibrary('c:\yourdll.dll'))这样的函数,参数用PChar转换下类型看看.
      

  5.   


    看一下下面的代码。。
    Tgetn=function:pchar;stdcall;
    var
      Form1: TForm1;
    implementation

    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var
      onehandle:Thandle;
      fun:Tgetn;
    begin
      onehandle:=loadlibrary('getname.dll');
      try
        if onehandle<>0 then
          @fun:=getprocaddress(onehandle,'getnames');
        if not(@fun=nil)then
          label1.Caption:=fun ;
      finally
        freelibrary(onehandle);
      end;
    end;
      

  6.   

    procedure TLoginFrm.cxButton1Click(Sender: TObject);
    type
      TGetT = function(c: integer): ShortString; stdcall;
    var
      GetT: TGetT;
      AHandle: THandle;
    begin
      AHandle:= LoadLibrary('DLib\Dlnk.dll');   // <- 相对路径,没问题. D:\Project\DLib\Dlnk.dll 也没问题
      GetT:= GetProcAddress(AHandle,'GetT');
      Application.Title:= GetT(1);
      .....
      FreeLibrary(AHandle);
      end;
    end;
      

  7.   

    本身是可以的。要麼就是DLL做了別的限制或者調用代碼錯了。
      

  8.   

    不在同一路径就要指定路径,LoadLibrary的时候把路径传进去+*.dll就可以了!
      

  9.   

    1.方法一:放到c:\windows\system32目录下
    2.方法二:添加路径到path当中,我的电脑->属性->高级>环境变量->找到path部分,添加即可