Entwickler-Ecke

Windows API - Funktion dynamisch laden


sperman41 - Di 19.08.08 22:07
Titel: Funktion dynamisch laden
Hallo Leute!

Ich stehe vor nem kleinen Problem.
Und zwar möchte ich eine Funktion dynamisch laden.
Wozu ich das brauch? Eigentlich gar nicht, ist ja auch nicht zwingend notwendig.
Dennoch interessiert es mich.
Habe auch paar kleine Tutorials durchgearbeitet und es klappt wunderbar.
Jedoch sind das sehr simple Beispiele.

Wie müsste oder könnte der Code aussehen, um diese Funktion dynamisch zu laden?

Delphi-Quelltext
1:
Function VirtualProtectEx(hProcess: HANDLE; lpAddress: LPVOID; dwSize: SIZE_T; flNewProtect: DWORD; var lpflOldProtect: DWORD): BOOL; stdcallexternal 'kernel32.dll' name 'VirtualProtectEx';                    

Natürlich nur wenns nicht zuviel Mühe macht.
Ich denke, dann würde ich es endlich kapieren

Danke

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Di 19.08.08 22:46

Hallo und :welcome: ;-)

http://wwwswt.informatik.uni-rostock.de/deutsch/Mitarbeiter/michael/lehre/Delphi_SS2001/Vortrag05/schnittstellen.html#8 ;-)

// EDIT:
Na, ich hab kurz Zeit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
type
  TVirtualProtectEx = function(hProcess: HANDLE; lpAddress: LPVOID; dwSize: SIZE_T; flNewProtect: DWORD; var lpflOldProtect: DWORD): BOOL; stdcall;


var
  MyVirtualProtectEx: TVirtualProtectEx;
  MyDLLHandle: THandle;
begin
  MyDLLHandle := LoadLibrary('kernel32.dll');

  if MyDLLHandle <> 0 then
  begin
    @MyVirtualProtectEx := GetProcAddress(MyDLLHandle, 'VirtualProtectEx');
    if @MyVirtualProtectEx <> nil then
    begin
      ergebnis := MyVirtualProtectEx(...);
      // ...
    end
    else
      ShowMessage('Fehler');
    FreeLibrary(MyDLLHandle);
  end
  else
    ShowMessage('Fehler');
end;
// EDIT2:
Mitkopierte Tippfehler korrigiert...


sperman41 - Mi 20.08.08 01:46

Vielen Dank erstmal!

Ich bekomme zig kompilierungsfehler.
Unter anderem undefinierte Bezeichner für : Loadlibary, Freelibary, Showmessage

Es heisst doch LibRary oder?


jaenicke - Mi 20.08.08 05:17

Heißt es, ich hab das Beispiel kopiert und nicht weiter nachgeschaut... :oops:

Jedenfalls sollten die benötigten Units eigentlich bei einem normalen Formular bereits eingebunden sein, das ist für LoadLibrary und FreeLibrary (habs auch korrigiert im geposteten Beispiel) die Unit Windows und für ShowMessage Dialogs.


Delete - Mi 20.08.08 09:17

Wir diskutieren übrigens wieder an zwei Stellen: http://www.delphipraxis.net/topic140594_funktion+dynamisch+laden.html :roll: