AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fehler beim laden einer Funktion aus einer DLL - PC bootet?
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim laden einer Funktion aus einer DLL - PC bootet?

Ein Thema von Pseudemys Nelsoni · begonnen am 2. Feb 2005 · letzter Beitrag vom 2. Feb 2005
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Fehler beim laden einer Funktion aus einer DLL - PC bootet?

  Alt 2. Feb 2005, 08:23
hi,

ich habe folgendes versucht:

Delphi-Quellcode:
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.
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 ~~)
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Fehler beim laden einer Funktion aus einer DLL - PC boot

  Alt 2. Feb 2005, 08:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Fehler beim laden einer Funktion aus einer DLL - PC boot

  Alt 2. Feb 2005, 08:43
nun gehts, danke dir
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#4

Re: Fehler beim laden einer Funktion aus einer DLL - PC boot

  Alt 2. Feb 2005, 08:45
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.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: Fehler beim laden einer Funktion aus einer DLL - PC boot

  Alt 2. Feb 2005, 08:51
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?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Fehler beim laden einer Funktion aus einer DLL - PC boot

  Alt 2. Feb 2005, 10:11
Zitat von Pseudemys Nelsoni:
dann bräucht ich LoadLibrary/FreeLibrary also nicht, richtig?
Genau.

Zitat:
Was passiert wenn die dll nicht gefunden wird? Löst GetProcAddress dann einen fehler aus oder wird sie einfach nil zurückgeben?
GetProcAddress kann keinen Fehler auslösen. Dafür benutzt du dann Assigned und prüfst, ob GetProcAddress erfolgreich war. Die DLL wird beim Programmstart mitgeladen und befindet sich in deinem Adressraum. Darum brauchst du auch kein LoadLibrary. Hier reicht ein GetModuleHandle. AdvAPI32 ist eine wichtige Systemdatei. Ohne dieses Datei würde dein Programm auch ohne RegOpenCurrentUser nicht laufen.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Fehler beim laden einer Funktion aus einer DLL - PC boot

  Alt 2. Feb 2005, 10:15
Zitat von Pseudemys Nelsoni:
danke für den code, sieht gut aus, dann bräucht ich LoadLibrary/FreeLibrary also nicht, richtig?
Das geht aber nur, weil in diesem Fall die DLL schon geladen wurde.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 Uhr.
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