Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Pointer auf TComponent versagt

  Alt 27. Okt 2004, 13:02
Hi,
ich merke im Moment wie selten ich mich in den letzten Wochen mit Delphi beschäftigt habe.

Ich erhalte im Moment ständig eine Zugriffsverletzung und ich weiß nicht warum.
Der Fehler versteckt sich in folgender Methode:
Delphi-Quellcode:
function TIPlugin.Install(aApplication: IApplication): integer; stdcall;
var
  pComp: PComponent;
  cComp: TComponent;
  ehHandler: TEventHandler;
begin
  Result := NERROR_SUCCESS;
  ehHandler := TEventHandler.Create;
  try
    cComp := TComponent(aApplication.GetComponent('btnExport'));
    if ((cComp <> nil) and (cComp is TButton)) then begin
      (cComp as TButton).OnClick := ehHandler.OnBtnClick;
    end;

    gaApplication := aApplication;
  except
    Result := ERROR_UNKNOWN_ERROR;
  end;
end;
Entscheidende Rolle spielt dabei diese Methode, auf die zugegriffen wird:
Delphi-Quellcode:
function TIApplication.GetComponent(sComponentName: WideString): Pointer;
var
  pResult: PComponent;
  cComp: TComponent;
begin
  { Komponente des Forms finden und zurück an das Plugin geben }
  cComp := frmMain.FindComponent(sComponentName);
  pResult := @cComp;
  Result := pResult;
end;
Und zu guter Letzt sieht der Eventhandler so aus:
Delphi-Quellcode:
  TEventHandler = class
  public
    procedure OnBtnClick(Sender: TObject);
  end;

procedure TEventHandler.OnBtnClick(Sender: TObject);
var
  exExporter: TExportDataSet;
begin
  exExporter := TExportDataSet.Create;
  try
    exExporter.FileName := 'C:\Export.csv';
    exExporter.DataSet := TDataSet(gaApplication.GetDataSet);
    exExporter.Seperator := ';';
    exExporter.FixedLength := false;

    exExporter.ExportData;
  finally
    exExporter.Free;
  end;
end;
So... dise Zugriffsverletzung, die ich beim Aufrufen von TIPlugin.Install erhalte, kann ich nirgendwo aufspüren. Habe ich irgendwas übersehen?

Chris
  Mit Zitat antworten Zitat