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