Einzelnen Beitrag anzeigen

CalganX

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

Re: Pointer auf TComponent versagt

  Alt 27. Okt 2004, 14:55
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
  Mit Zitat antworten Zitat