![]() |
Fehler beim laden einer Funktion aus einer DLL - PC bootet?
hi,
ich habe folgendes versucht:
Delphi-Quellcode:
Die zweite Bedingung der letzten If-Abfrage löst einen Fehler aus und mein PC bootet direkt... was ist da denn falsch? Und das beste is noch das nach dem Start die projektdatei nichtmehr lesbar ist und ich alles neu schreiben muss (delphi zeigt dann nur vierecke an ~~)
program patch;
{$APPTYPE CONSOLE} uses Windows; type TRegOpenCurrentUser = function(samDesired: REGSAM; phkResult: PHKEY): LongInt; stdcall; var LibModule: HMODULE; RegOpenCurrentUser: TRegOpenCurrentUser; phkResult: PHKEY; begin LibModule := LoadLibrary('Advapi32.dll'); if LibModule <> 0 then // DLL wurde erfolgreich geladen begin RegOpenCurrentUser := GetProcAddress(LibModule, 'RegOpenCurrentUser'); if (@RegOpenCurrentUser <> nil) and (RegOpenCurrentUser(KEY_READ, phkResult) = ERROR_SUCCESS) then begin // end; end; end. |
Re: Fehler beim laden einer Funktion aus einer DLL - PC boot
Standard-Fehler der Delphiprogrammierer. Ein Zeiger in C ist oft Call-by-Reference.
Du gibst einen zufaelligen Zeigerwert an eine funktion, die dorthin schreibt.
Delphi-Quellcode:
program patch;
{$APPTYPE CONSOLE} uses Windows; type TRegOpenCurrentUser = function(samDesired: REGSAM; phkResult: PHKEY): LongInt; stdcall; var LibModule: HMODULE; RegOpenCurrentUser: TRegOpenCurrentUser; hkResult: HKEY; begin LibModule := LoadLibrary('Advapi32.dll'); if LibModule <> 0 then // DLL wurde erfolgreich geladen begin RegOpenCurrentUser := GetProcAddress(LibModule, 'RegOpenCurrentUser'); if Assigned(RegOpenCurrentUser) and (RegOpenCurrentUser(KEY_READ, @hkResult) = ERROR_SUCCESS) then begin // end; end; end. |
Re: Fehler beim laden einer Funktion aus einer DLL - PC boot
nun gehts, danke dir :)
|
Re: Fehler beim laden einer Funktion aus einer DLL - PC boot
Ich würde es eher so machen...
Delphi-Quellcode:
program patch;
{$APPTYPE CONSOLE} uses Windows; type TRegOpenCurrentUser = function(samDesired: REGSAM; var phkResult: HKEY): Integer; stdcall; var RegOpenCurrentUser: TRegOpenCurrentUser; hkResult: HKEY; begin RegOpenCurrentUser := GetProcAddress(GetModuleHandle('ADVAPI32.DLL'), 'RegOpenCurrentUser'); if Assigned(RegOpenCurrentUser) then if RegOpenCurrentUser(KEY_READ, hkResult) = ERROR_SUCCESS then begin // RegCloseKey(hkResult); end; end. |
Re: Fehler beim laden einer Funktion aus einer DLL - PC boot
hallo springt,
danke für den code, sieht gut aus, dann bräucht ich LoadLibrary/FreeLibrary also nicht, richtig? Noch eine Frage: Was passiert wenn die dll nicht gefunden wird? Löst GetProcAddress dann einen fehler aus oder wird sie einfach nil zurückgeben? |
Re: Fehler beim laden einer Funktion aus einer DLL - PC boot
Zitat:
Zitat:
|
Re: Fehler beim laden einer Funktion aus einer DLL - PC boot
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz