AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Unerlaubte Member-Variablen im Service?
Thema durchsuchen
Ansicht
Themen-Optionen

Unerlaubte Member-Variablen im Service?

Ein Thema von Phoenix · begonnen am 23. Sep 2003 · letzter Beitrag vom 2. Aug 2007
 
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#1

Unerlaubte Member-Variablen im Service?

  Alt 23. Sep 2003, 17:32
Hallo,

folgendes Problem:

Ich habe ein Klasse und einige Methoden darauf. Eine dieser Methoden übergebe ich nun an den ServiceControlDispatcher um den Dienst zu starten. In dieser übergebenen Methode will bzw. muss ich aber weiterhin auf member-Variablen meines Objektes zugreifen können. In dem Augenblick in dem ich aber auf ein Element der Klasse zugreifen will (ausser einem anderen Methodenaufruf) schmiert mir der Service mit einer Zugriffsverletzung ab.

Etwas anschaulicher:

Delphi-Quellcode:
   PhService = class
      // Private declarations
      private
         m_name: string;
                  [...]
      private
         procedure doStart;
         procedure servicehandler(a_val: integer); stdcall;
         procedure serviceProc(a_dwargc: integer; a_lpszargv: PChar); stdcall;
      // Proteced declarations
      protected
         procedure service_main; virtual;         protected
         property myName: string read m_name write m_name;
      // Constructor / Destructor
                  [...]
      // Public declarations
      public
         procedure Start;
      public
         property Mode: integer read m_startupmode write m_startupmode;
         property Silent: boolean read m_silent write m_silent;
   end;
Delphi-Quellcode:
procedure PhService.doStart;
begin;
   doDebugOutput('doStart');
   m_dispatcher.lpServiceName := PChar(myName);
   m_dispatcher.lpServiceProc := @PhService.serviceProc; // <-- hier wird die kommende Methode übergeben
   doDebugOutput('Start Dispatcher');
   StartServiceCtrlDispatcher(m_dispatcher); // <-- hier die Übergabe und der Start der Methode
end;


// controls the service execution
//
procedure PhService.serviceProc(a_dwargc: integer; a_lpszargv: PChar);
var
   l_name: AnsiString;
begin
   doDebugOutput('begin ServiceProc ' + m_Name); // <-- hier wird auf die Membervariable zugegriffen: Exception!
   m_statushandle := RegisterServiceCtrlHandler(PChar(m_name),
                                                @PhService.ServiceHandler);
   doDebugOutput('has ServiceController');
   if (m_statusHandle <> 0) then
   begin
      ZeroMemory(@m_status, SizeOf(m_status));
      with m_status do
      begin
         dwServiceType := SERVICE_WIN32_OWN_PROCESS;
         dwCurrentState := SERVICE_START_PENDING;
         dwControlsAccepted := SERVICE_ACCEPT_STOP or
                               SERVICE_ACCEPT_PAUSE_CONTINUE;
         dwWaitHint := 1000;
      end; // of with m_status do
         [...]
end;
Ich kann mir das leider gar nicht erklären. Wie kann ich aus der übergebenen Methode jetzt ohne eine Speicherverletzung zu bekommen auf die Eigenschaften der Klasse zugreifen?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
 


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 16:07 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