を使用しては私のコードです:ロードDLLのGetModuleHandle/LoadLibraryを経て、ここにFreeLibrary
function GetProcedureAddress(var P: FARPROC; const ModuleName, ProcName: AnsiString): Boolean;
var
ModuleHandle: HMODULE;
begin
Result := False;
ModuleHandle := GetModuleHandle(PAnsiChar(AnsiString(ModuleName)));
if ModuleHandle = 0 then
ModuleHandle := LoadLibrary(PAnsiChar(ModuleName)); // DO WE NEED TO CALL FreeLibrary ?
if ModuleHandle <> 0 then
begin
P := Pointer(GetProcAddress(ModuleHandle, PAnsiChar(ProcName)));
if Assigned(P) then
Result := True;
end;
end;
function PathMakeSystemFolder(Path: AnsiString): Boolean;
var
_PathMakeSystemFolderA: function(pszPath: PAnsiChar): BOOL; stdcall;
begin
Result := False;
if GetProcedureAddress(@_PathMakeSystemFolderA, 'shlwapi.dll', 'PathMakeSystemFolderA') then
Result := _PathMakeSystemFolderA(PChar(Path));
end;
我々はLoadLibraryのを使用している場合にFreeLibraryを呼び出す必要がありますか?またはアプリケーションの終了時に参照カウントが自動的に減少しますか?
AnsiStringにAnsiStringを型キャストする必要はありません。GetProcedureAddressのModuleNameを参照しています。 –
あなたは正しいです。 – kobik
プロセスによって取得されたすべてのオブジェクトは、終了時に解放されます。しかし、もはや必要がなくなったら解放するのがよい習慣です。 –