Hola,
Mis dos céntimos, como suele decirse:
Código Delphi
[-]
function IsUserAnAdmin(): boolean;
var
hShell32: HMODULE;
_IsUserAnAdmin: function(): bool; stdcall;
begin
result := false;
hShell32 := LoadLibrary('shell32.dll');
if (hShell32 <> 0) then
begin
try
_IsUserAnAdmin := GetProcAddress(hShell32, 'IsUserAnAdmin');
if Assigned(_IsUserAnAdmin) then result := _IsUserAnAdmin();
finally
FreeLibrary(hShell32);
end;
end;
end;
La idea principal es que la función retorne "false" en lugar de "true" si no consigue cargar la librería o al cabo no consigue obtener un puntero a la función que nos interesa de la librería. También, como puede verse, liberamos en la propia función la librería que previamente cargamos. Y, como también puede verse, todo queda reducido a una función, sin necesidad de variables globales.
