![]() |
Warum hier Zugriffsverletzung?
Ich habe hier die Definition einer Funktion:
Delphi-Quellcode:
Soweit so gut. Der Record enthält doch nur einen PChar, sollte also doch auf Speicherebene identisch mit PChar sein. Doch warum funktioniert dann das hier nicht:
function ChangeServiceConfig2(hService: SC_HANDLE; dwInfoLevel: DWord;
lpInfo: Pointer): BOOL; stdcall; type _SERVICE_DESCRIPTIONA = packed record lpDescription: PChar; end; TServiceDescriptionA = _SERVICE_DESCRIPTIONA; PServiceDescriptionA = ^TServiceDescriptionA; _SERVICE_DESCRIPTIONW = packed record lpDescription: PWChar; end; TServiceDescriptionW = _SERVICE_DESCRIPTIONW; PServiceDescriptionW = ^TServiceDescriptionW; //we use the ANSI version TServiceDescription = TServiceDescriptionA;
Delphi-Quellcode:
Benutz ich den Record und setz dort den PChar, dann klappt es. Aber wieso gibt es hier die Zugriffsverletzung??
procedure TServiceInstaller.SetDescription(const Value: String);
begin if FServiceOpened then begin ChangeServiceConfig2(FhService, SERVICE_CONFIG_DESCRIPTION, PChar(Value)); FDescription := Value; end; end; |
Re: Warum hier Zugriffsverletzung?
PChar <> PPChar
Langfassung: PChar(Value) übergibt die Adresse des ersten Zeichens von Value. Die Funktion erwartet aber einen Zeiger auf einen Zeiger (erster Member der Struktur) auf des erste Zeichen von Value. |
Re: Warum hier Zugriffsverletzung?
Autsch :wall:
Klar. Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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