Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamische Verwendung von RegisterServiceProcess funzt nicht (https://www.delphipraxis.net/12555-dynamische-verwendung-von-registerserviceprocess-funzt-nicht.html)

Lefko 29. Nov 2003 17:19


Dynamische Verwendung von RegisterServiceProcess funzt nicht
 
Hallo Freunde :hi: ,

ich habe folgendes geschrieben, um die kernel32.dll dynamisch zu laden, aber es klappt etwas nicht mit der verwendung von RegisterServiceProcess:

Delphi-Quellcode:

var DLLHandle : THandle;
   
Form1.create(...);
begin
//Taskmanager
if Win32Platform = 1 then
  try
    DLLHandle := LoadLibrary('C:\Windows\System\kernel32.dll');
    if DLLHandle <> 0 then
      begin
       @RSP_Procedure := GetProcAddress(DLLHandle, 'RegisterServiceProcess');
       if Assigned(RSP_Procedure) then
         begin
          if RSP_Procedure(GetCurrentProcessID, 1) = 1
            then showmessage('Erfolgreich versteckt')
            else showmessage('Verstecken fehlgeschlagen');
         end;
      end;
    FreeLibrary(DLLHandle);
  except end;
end;
Es kommt aber immer "Verstecken fehlgeschlagen", kann mir jemand erklären, weshalb?
Ich prüfe ja extra, ob RSP_Procedure auch assigned ist, also findet er RegisterServiceProcess schon; da kann der Fehler nicht liegen.

MfG Lefko

Luckie 29. Nov 2003 17:21

Re: Dynamische Verwendung von RegisterServiceProcess funzt n
 
Was gibt denn RSP_Procedure zurück? Weis das mal einer einzelnen Variable zu und kuck dir den Wert mal an. Dann wäre noch interessant, was RaiselastOSError() anzeigt. Und unter Win9x arbeitest du oder?

Lefko 29. Nov 2003 17:31

Re: Dynamische Verwendung von RegisterServiceProcess funzt n
 
Der Wert von RSP_Procedure ist 0 und RaiseLastOSError hat die message 'A call to an OS function failed'.

Wie kommt das? ich hab WinME, da klappt die verwendung von RegisterServiceProcess sonst gut...

MfG Lefko

Christian Seehase 29. Nov 2003 21:19

Re: Dynamische Verwendung von RegisterServiceProcess funzt n
 
Moin Lefko,

wie hast Du denn RSP_Procedure deklariert?

Hast Du daran gedacht stdcall als Aufrufkonvention anzugeben?

Lefko 29. Nov 2003 23:45

Re: Dynamische Verwendung von RegisterServiceProcess funzt n
 
Zitat:

Zitat von Christian Seehase
wie hast Du denn RSP_Procedure deklariert?

so:

Delphi-Quellcode:
type DLLProcedure = function(ProcessID, OnOff : DWord) : DWord; stdcall;

var RSP_Procedure : DLLProcedure = nil;
Zitat:

Zitat von Christian Seehase
Hast Du daran gedacht stdcall als Aufrufkonvention anzugeben?

Natürlich nicht! :mrgreen:

ich prüfs nochmal mit stdcall (hab ich ja jetzt dazu geschrieben).

MfG Lefko.

EDIT:

Ja, das war wohl der Fehler, jetzt klappt es wunderbar :)

PS: Was ist denn der Unterschied eigentlich zwischen z.B. DWord und integer? hatte nämlich result als integer deklariert, vielleicht lag s auch daran...? weil da nur 0 oder 1 als result kommt, nahm ich integer, aber es muss dword sein

himitsu 30. Nov 2003 00:13

Re: Dynamische Verwendung von RegisterServiceProcess funzt n
 
http://www.FrankNStein.de/Smiley-Wolke.gif Hallöle Lefko,

Zitat:

Delphi-Syntax:
type DWORD = Longword;

Beschreibung
DWORD (Double Word) repräsentiert einen vorzeichenlosen 4-Byte-Integer. Er wird primär für Windows-API-Aufrufe eingesetzt. Die C++ Version ist nur unter Windows verfügbar.
Code:
Integer  -2147483648..2147483647  32 Bit, mit Vorzeichen
Word     0..65535                 16 Bit, ohne Vorzeichen
Longword 0..4294967295            32 Bit, ohne Vorzeichen
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Lefko 30. Nov 2003 00:32

Re: Dynamische Verwendung von RegisterServiceProcess funzt n
 
Danke Himitsu :)

MfG Lefko

MathiasSimmack 30. Nov 2003 08:18

Re: Dynamische Verwendung von RegisterServiceProcess funzt n
 
Darf ich vorschlagen, dass du anstelle der Eins
Zitat:

Zitat von Lefko
Delphi-Quellcode:
if Win32Platform = 1 then

lieber "VER_PLATFORM_WIN32_WINDOWS" benutzt. Das kommt auf das gleiche heraus, ist aber lesbarer als so eine Eins. Zumindest sieht man mit der Konstanten sofort, für welches OS der nachfolgende Aufruf gilt.

Lefko 30. Nov 2003 12:31

Re: Dynamische Verwendung von RegisterServiceProcess funzt n
 
Darfst du! :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 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