Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   lpDependencies in QUERY_SERVICE_CONFIG (https://www.delphipraxis.net/179563-lpdependencies-query_service_config.html)

Dalai 16. Mär 2014 16:47

lpDependencies in QUERY_SERVICE_CONFIG
 
Ein freundliches Hallo in die Runde :),

leider hab ich schon wieder ein Problem. Diesmal geht's um die Deklaration der Datenstruktur QUERY_SERVICE_CONFIG. Dort gibt es lpDependencies als LPTSTR (PChar in Delphi), das laut MS null-separierte Elemente enthalten kann/soll:
Zitat:

A pointer to an array of null-separated names of services or load ordering groups that must start before this service. The array is doubly null-terminated.
Wie kommt man an die Elemente nach dem ersten ran, wenn doch nach dem ersten Nullbyte aufgehört wird, zu lesen? Auf dieser Seite wird die Sache für VB6 beleuchtet, was ich aber leider mangels Kenntnissen in VB nicht so wirklich verarbeiten kann.

Kann mich jemand erleuchten?

MfG Dalai

himitsu 16. Mär 2014 17:03

AW: lpDependencies in QUERY_SERVICE_CONFIG
 
Indem man keine Kopierfunktion benutzt, welche beim #0 aufhört.
Einige APIs arbeiten mit einem zusätzlichen Parameter für die Länge,
oder man greift Zeichen für Zeichen darauf zu und verwendet dabei ebenfalls eine Längenangabe und nicht die #0 für's Ende.

Dalai 16. Mär 2014 17:21

AW: lpDependencies in QUERY_SERVICE_CONFIG
 
Zitat:

Zitat von himitsu (Beitrag 1252162)
Einige APIs arbeiten mit einem zusätzlichen Parameter für die Länge,

Und welche Länge sollte ich deiner Meinung nach benutzen? Ich kenne sie doch vorher nicht.

MfG Dalai

himitsu 16. Mär 2014 17:39

AW: lpDependencies in QUERY_SERVICE_CONFIG
 
Im Grunde steht alles in der Beschreibung.
Zitat:

A pointer to an array of null-separated names of services or load ordering groups that must start before this service. The array is doubly null-terminated
Es gibt da jetzt mehrere Wege das auszulesen.
Entweder man sucht die Doppel-0 (
Delphi-Quellcode:
#0#0
), oder man such den "leeren" String (
Delphi-Quellcode:
''
).
  • #0#0 suchen und bis dahin auslesen
  • einen String nach dem Anderem auslesen (jeweils bei #0 aufhören)
    und der letzte String ist demnach leer, da sofort wieder die entgültig abschließende #0 kommt.

Dalai 16. Mär 2014 17:58

AW: lpDependencies in QUERY_SERVICE_CONFIG
 
OK, also ist der Weg, den ich in diesem niederländischen Forum gefunden habe, gar nicht so verkehrt.

Momentan benutze ich dies:
Delphi-Quellcode:
var Buffer: PQueryServiceConfig;
    deplist: PChar;

deplist:= Buffer^.lpDependencies;
if Assigned(deplist) then
begin
  while deplist[0] <> #0 do
  begin
    if deplist <> '' then
      FDependencies.Add(deplist);
    Inc(deplist, StrLen(deplist) + 1)
  end;
end;
FDependencies ist eine TStringList.

Aber wie ist die Situation mit PWideChar (
Delphi-Quellcode:
Buffer: PQueryServiceConfigW;
) und Aufruf der entsprechenden Funktion QueryServiceConfigW? Werden die PWideChars nicht bereits mit doppeltem #0 abgeschlossen? Nicht dass ich das im Delphi 5 brauchen würde, ich frag nur interessehalber.

MfG Dalai


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