これは一般的な問題だと思いますが、ぐるぐる回って解決策を提示していません。ライブラリの読み込みに問題があります。
私がライブラリ用に持っているソースは静的ロードを利用していますが、これは問題ありません。私が使用している残りのライブラリは動的にロードされます。
問題は、私のプログラムが別のアプリケーション(ホスト)によってライブラリ(プラグイン)としてロードされていることです。これは、HOST実行可能ファイルのディレクトリが、私のアプリケーションのプログラムディレクトリではないことを意味します。
静的にロードされているライブラリ(フォントレンダリング用の単純なライブラリ)は、プログラムのディレクトリ内にあり、ソフトウェアをプラグインとしてロードするときに見つかりません。ソフトウェアを「スタンドアロン」プログラム(ホストなし)としてロードする場合、問題はありません。
'missing'ライブラリをホストアプリケーションのフォルダに入れることで問題を解決できましたが、これは悪い解決策です。
ライブラリの名前への直接パスを提供することでも解決できましたが、これも悪い解決策です。エンドユーザーが私のソフトウェアをどこにインストールするのかわかりません。
動的ローディングを使用するようにコードを書き直すことなく、この問題を回避する方法はありますか?
静的ロードを引き続き使用するには、ライブラリを登録する必要がありますか?他のプログラムが別のバージョンのライブラリを使用している可能性があるため、このライブラリの登録は侵襲的すぎると思います。
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';