Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WINAPI-Funktionen Windows Versionsabhängig (https://www.delphipraxis.net/106947-winapi-funktionen-windows-versionsabhaengig.html)

RWarnecke 19. Jan 2008 13:33


WINAPI-Funktionen Windows Versionsabhängig
 
Hallo zusammen,

ich habe mal wieder ein Problem, ich verwende in meinem Programm SystemInfo in der neuen Version den folgenden Aufruf im Interface-Teil :
Delphi-Quellcode:
function GetAdaptersAddresses(Family: ULONG; Flags: cardinal; Reserved: PVOID;
  pAdapterAddresses: PIP_ADAPTER_ADDRESSES; pOutBufLen: PULONG): dword; stdcall;
     external 'IPHLPAPI.DLL' name 'GetAdaptersAddresses';
Wenn ich jetzt das Program unter Windows XP und höher aufrufe funktioniert alles ganz wunderbar. Nur wenn ich das Programm jetzt unter Windows 2000 aufrufe, gibt es die Fehlermeldung, das er den Einstiegspunkt nicht findet. Das ist mir ja auch klar, wie man unter MSDN-Library durchsuchenGetAdaptersAddresses nachlesen kann.

Nun zu meiner Frage, kann ich das ganze trotzdem verwenden und es zur Windowsversion abhängig machen ?

DeddyH 19. Jan 2008 13:47

Re: WINAPI-Funktionen Windows Versionsabhängig
 
Hallo Rolf,

verwende doch dynamische statt statischer Bindung, also mit LoadLibrary und GetProcAddress ermitteln, ob die Funktion vorhanden ist. Wenn nicht, ist sie halt nicht zu verwenden, aber das Programm läuft zumindest.

RWarnecke 19. Jan 2008 13:53

Re: WINAPI-Funktionen Windows Versionsabhängig
 
Hallo Deddy,

das wäre eine Idee, mal schauen was ich daraus machen kann.

RWarnecke 19. Jan 2008 20:47

Re: WINAPI-Funktionen Windows Versionsabhängig
 
Habe das Problem jetzt mit LoadLibrary und GetProcAddress gelöst.

DeddyH 19. Jan 2008 20:55

Re: WINAPI-Funktionen Windows Versionsabhängig
 
:thumb:

RWarnecke 22. Jan 2008 18:32

Re: WINAPI-Funktionen Windows Versionsabhängig
 
Ich habe dazu noch eine Frage, kann ich an dem folgenden Beispiel noch etwas optimieren/verbessern ?
Delphi-Quellcode:
hclxwin32 := LoadLibrary('clxwin32.dll');
hnetwin32 := LoadLibrary('netwin32.dll');
hcalwin32 := LoadLibrary('calwin32.dll');
if (hclxwin32 <> 0) and (hnetwin32 <> 0) and (hcalwin32 <> 0) then
begin
  @CallsInit := GetProcAddress(hcalwin32, 'NWCallsInit');
  @ScanConnRefs := GetProcAddress(hclxwin32, 'NWCCScanConnRefs');
  @GetConnRefInfo := GetProcAddress(hclxwin32, 'NWCCGetConnRefInfo');
  @OpenConnByRef := GetProcAddress(hclxwin32, 'NWCCOpenConnByRef');
  @CreateContextHandle := GetProcAddress(hnetwin32, 'NWDSCreateContextHandle');
  @MapIDToName := GetProcAddress(hnetwin32, 'NWDSMapIDToName');
  if (@CallsInit <> nil) and (@ScanConnRefs <> nil) and
     (@GetConnRefInfo <> nil) and (@OpenConnByRef <> nil) and
     (@CreateContextHandle <> nil) and (@MapIDToName <> nil) then
  begin

    // irgendwelcher Code wird abgearbeitet

  end;
end;

DeddyH 22. Jan 2008 18:35

Re: WINAPI-Funktionen Windows Versionsabhängig
 
Wenn Sofern Du auch irgendwo FreeLibrary aufrufst, sehe ich jetzt nichts.

[edit] So wird deutlicher, was ich gemeint hatte ;) [/edit]

RWarnecke 22. Jan 2008 18:48

Re: WINAPI-Funktionen Windows Versionsabhängig
 
Zitat:

Zitat von DeddyH
Wenn Du auch irgendwo FreeLibrary aufrufst, sehe ich jetzt nichts.

Ok, das mit FreeLibrary habe ich hier vergessen, da das nur ein Ausschnit aus der Funktion ist. FreeLibrary rufe ich ganz am Schluss der Funktion auf.

sirius 22. Jan 2008 18:51

Re: WINAPI-Funktionen Windows Versionsabhängig
 
Woran und wo gedenkst du denn zu verbessern? Kürzerer Quellcode oder kürzere Laufzeit?
Aber ich denke kaum, dass hier sinnvoll etwas rausgeholt werden kann.

RWarnecke 22. Jan 2008 18:56

Re: WINAPI-Funktionen Windows Versionsabhängig
 
Zitat:

Zitat von sirius
Woran und wo gedenkst du denn zu verbessern? Kürzerer Quellcode oder kürzere Laufzeit?

Ich denke hauptsächlich an die IF-Schleifen. Denn wenn ich mehrere Befehle habe, kann die ja ziemlich lang werden, was ich für nicht so gut halte. Gibt es vielleicht eine Möglichkeit mit einem Befehl mehrere Funktionen einer DLL zu überprüfen. Da möchte ich optimieren/verbessern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz