Delphi DLL组织 - 静态和动态加载

Aud*_*oGL 1 delphi dll static dynamic libraries

我想这是一个常见问题,但谷歌搜索并没有提出解决方案.我只是在加载库时遇到了一些麻烦.

我对该库的来源是使用静态加载,这很好.我正在使用的其余库是动态加载的.

问题是我的程序现在被一个不同的应用程序(主机)加载为一个库(它是一个插件).这意味着HOST可执行文件的目录不是我的应用程序的程序目录.

静态加载的库(只是一个简单的字体渲染库)位于我的程序目录中,当我将软件作为插件加载时,找不到它.当我将我的软件加载为"独立"程序(没有主机)时,没有问题.

我能够通过将"缺失"库放入主机应用程序的文件夹来解决问题,但这是一个糟糕的解决方案.

我也能够通过提供库名称的直接路径来解决它,但这也是一个糟糕的解决方案.我不知道最终用户将在哪里安装我的软件.

有没有办法绕过这个问题而不必重写代码来使用动态加载?

要继续使用静态加载,是否必须注册库?我认为注册这个库是太具侵略性,因为其他程序可能正在使用它的不同版本.

const
  ft_lib = 'freetype6.dll';  //here is our problem. I could put a direct path
                             //here, to fix it, but I will not know this path
                             //on an end-user's machine

type
  FT_Library = Pointer;

function  FT_Init_FreeType(out alibrary : FT_Library ) : FT_Error;
  cdecl; external ft_lib name 'FT_Init_FreeType';
Run Code Online (Sandbox Code Playgroud)

dth*_*rpe 5

程序加载器在系统路径上查找DLL.只需确保您的freetype6.dll(及其所需的DLL)与主机exe位于同一目录中,或者位于文件路径(PATH环境变量)中的目录中.

供参考:http://msdn.microsoft.com/en-us/library/7d83bc18(v = vs.71).aspx