Einzelnen Beitrag anzeigen

uoeb7gp
(Gast)

n/a Beiträge
 
#7

Re: Windows API Übersetzung - Welche Variante ist besser ?

  Alt 6. Nov 2009, 00:34
RWarnecke hat folgendes geschrieben:
Dann werde ich meine Unit nach Variante 1 umschreiben, da ich doch viele Funktionen habe,
die über verschiedene Windows Versionen verteilt sind.

Variante1 ist statisch, da bekommst wenn was nichgt gefunden wird, böse Fehlermeldungen.

Versuchs mal mit folgendem (Types must aus der IPHLPAPI ziehen).

type
TGetAdapterAdresses = function(Family: ULONG; Flags: cardinal;
Reserved: PVOID; pAdapterAddresses: PIP_ADAPTER_ADDRESSES;
pOutBufLen: PULONG) : DWORD; stdcall;

function SafeLoadLibrary(const Filename: String; ErrorMode: UINT): HMODULE;
var
SaveErrorMode: UINT;
SaveFPUControlWord: Word;
begin
SaveErrorMode := SetErrorMode(ErrorMode);
try
asm FNSTCW SaveFPUControlWord end;
try
Result := LoadLibrary(PChar(Filename));
finally
asm
FNCLEX
FLDCW SaveFPUControlWord
end;
end;
finally
SetErrorMode(SaveErrorMode);
end;
end;


function GetAdapterAdresses(Family: ULONG; Flags: cardinal; Reserved: PVOID;
pAdapterAddresses: PIP_ADAPTER_ADDRESSES; pOutBufLen: PULONG) : DWORD;
var
DLLProc: TGetAdapterAdresses;
DLLHandle: THandle;
begin
result := 0;
try
DLLHandle := SafeLoadLibrary('IPHLPAPI.DLL', SEM_NOOPENFILEERRORBOX);
if DLLHandle <> 0 then begin
try
@DLLProc := GetProcAddress(DLLHandle, 'GetAdapterAdresses');
if @DLLProc <> nil
result := DLLProc(Family, Flags, Reserved, pAdapterAddresses, pOutBufLen);
finally
FreeLibrary(DLLHandle);
end;
end;
except
result := DWORD(-1);
end;
end;
  Mit Zitat antworten Zitat