Delphi可执行文件调用DLL,该DLL又调用其他的动态库,多个DLL不在同一目录下,应该如何实现?

时间:2022-12-23 12:46:12
   如题,利用Delphi书写的一个可执行文件,需要调用到某个DLL(A),但是该DLL又调用了其他的DLL(B,C等)。但是DLL(A)与DLL(B,C)在可执行文件的不同的子目录下,请问应该如何实现呢?在可执行文件中可以控制么?在DLL(A)中实现可以么?我这边做过动态加载,是没有实现,请高手指教下!

//这部分是DLL(A)中的代码

procedure LoadDLL;
var
  sDllFileName: string; //存储DLL(B,C)的路径
begin
  sDllFileName := ExtractFilePath(Application.ExeName) + 'R\DLLBC.dll'; 
  RSViComDevHandle := LoadLibrary(PChar(sDllFileName));
 
  //do something
end;

如上加载没成功!

4 个解决方案

#1


procedure LoadDLL;
var
  sz: array[0..Max_Path - 1] of Char;
  sDllFileName: string; //存储DLL(B,C)的路径
begin
  GetModuleFileName(HInstance, sz, MAX_PATH);
  sDllFileName := ExtractFilePath(sz) + 'R\DLLBC.dll'; 
  RSViComDevHandle := LoadLibrary(PChar(sDllFileName)); 
end;

试试吧,这样应该可以

#2


有病么,非要不放在一个目录里

#3


不放在同一个目录下就要用其他方式找到这个dll,比如增加配置文件
要不然怎么找到这个dll

#4


1楼的方法我也使用过,可是还是不行。
3楼的应该是个可行的方法,我还是问问同事吧,谢谢了!

#1


procedure LoadDLL;
var
  sz: array[0..Max_Path - 1] of Char;
  sDllFileName: string; //存储DLL(B,C)的路径
begin
  GetModuleFileName(HInstance, sz, MAX_PATH);
  sDllFileName := ExtractFilePath(sz) + 'R\DLLBC.dll'; 
  RSViComDevHandle := LoadLibrary(PChar(sDllFileName)); 
end;

试试吧,这样应该可以

#2


有病么,非要不放在一个目录里

#3


不放在同一个目录下就要用其他方式找到这个dll,比如增加配置文件
要不然怎么找到这个dll

#4


1楼的方法我也使用过,可是还是不行。
3楼的应该是个可行的方法,我还是问问同事吧,谢谢了!