Einzelnen Beitrag anzeigen

Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

Warum hier Zugriffsverletzung?

  Alt 27. Jul 2004, 16:04
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??
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat