[Delphi] 実行時にダイナミックにDLLをロードする

以下のサンプルコードは実行時にDLLを動的にロードし、その中のエントリポイントを取得します。
DLLがロードでき、エントリポイントが正常に見つかってその機能を使用できる場合には true を返しますが不幸にもロードできなかった場合にはfalseを返します。
GetModuleHandle、GetProcAddress WindowsAPIを使用して指定した名前のエントリポイントを探していますが、この方法はDelphiがControlユニットなどでIMMを使用するのに使っています。

function FuncAvail(Lib, Func: string; var hnd: THandle; var ptr: 
Pointer): boolean;
begin 
  Result := false;
  hnd := 0;
  if LoadLibrary(PChar(Lib)) = 0 then
  begin
    Exit;
  end;
  hnd := GetModuleHandle(PChar(Lib));
  if (hnd <> 0) then
  begin
    ptr := GetProcAddress(hnd, PChar(Func));
    if (ptr <> nil) then
    begin
      Result := true;
    end;
  end;
end;

コメント (0件)


くろねこ研究所
https://www.blackcat.xyz/article.php/ProgramingFAQ_del0023