Ich habe hier die Definition einer Funktion:
Delphi-Quellcode:
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;
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:
Delphi-Quellcode:
procedure TServiceInstaller.SetDescription(const Value: String);
begin
if FServiceOpened then
begin
ChangeServiceConfig2(FhService, SERVICE_CONFIG_DESCRIPTION, PChar(Value));
FDescription := Value;
end;
end;
Benutz ich den Record und setz dort den PChar, dann klappt es. Aber wieso gibt es hier die Zugriffsverletzung??