Hi David,
Zitat von
mirage228:
Wird in GetComponent nicht nil zurückgeliefert? (Wozu eigentlich diese "Zwischenvariable" ?)
Nein. Zur Übersichtlichkeit.
Zitat von
mirage228:
Versuch mal in Install erst dem pComp das Ergebnis zuzuweisen und das erst auf NIL zu überprüfen und erst anschließend casten
Hat nix gebracht.
Zitat von
mirage228:
Versuch den Cast nach TComponent mal mit AS. Vorteil könnte sein, dass AS intern IS aufruft und somit prüft, ob da wirklich ein Zeiger auf TComponent zurückgegben wurde
Versuch das mal mit einem Pointer.
Geht leider nicht. Vermutlich wegen der fehlende
RTTI eines Pointers.
Zitat von
mirage228:
An welcher Stelle tritt der Fehler genau auf?
Gute Frage. Das Debuggen einer
DLL ist etwas... nunja... umständlich. Und leider auch in meinem Fall nicht möglich...
Ich habe jetzt folgende Fehlerabfangroutinen:
Delphi-Quellcode:
begin
Result := NERROR_SUCCESS;
ehHandler := TEventHandler.Create;
try
try
pComp := aApplication.GetComponent('btnExport');
except
Result := ERROR_INVALID_EXP;
Exit;
end;
if pComp = nil then begin
Result := ERROR_INVALID_POINTER;
Exit;
end;
try
cComp := TComponent(pComp);
except
Result := ERROR_INVALID_EXP;
Exit;
end;
if cComp = nil then begin
Result := ERROR_INVALID_COMPONENT;
Exit;
end;
if (cComp is TButton) then begin
(cComp as TButton).OnClick := ehHandler.OnBtnClick;
end else begin
Result := ERROR_INVALID_TYPE;
Exit;
end;
gaApplication := aApplication;
except
Result := ERROR_UNKNOWN_ERROR;
Exit;
end;
Und was bekomme ich? - Genau eine Zugriffsverletzung bei der Zeile
case iPlg.Install(iApp) of
der Hauptanwendung.
Chris