AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Published Methode und Zeiger

Ein Thema von Ghostwalker · begonnen am 5. Dez 2016 · letzter Beitrag vom 6. Dez 2016
Antwort Antwort
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

Published Methode und Zeiger

  Alt 5. Dez 2016, 18:15
Delphi-Version: 2006
Öhm...beim testen meiner Event-Liste fällt mir grad was auf.

Das

Delphi-Quellcode:
{$Methodinfo on}
Type
  TMyObject = Class(TObject)
  private
  protected
  public
  published
    Procedure DoSomething(aPointer:pointer);
quitiert der Compiler mit einem internen Fehler. Verschieb ich die Methode in den Public-Bereich
funzt er wider.

Ist das in neueren Versionen auch so ? Warum ?
Uwe
e=mc² or energy = milk * coffee²

Geändert von Ghostwalker ( 5. Dez 2016 um 18:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Published Methode und Zeiger

  Alt 5. Dez 2016, 20:46
Interne Fehler hab ich och öfters.

Aber muß die Methode überhaut unbedingt published sein?
$2B or not $2B
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Published Methode und Zeiger

  Alt 6. Dez 2016, 08:19
Jup, sonst krieg ich keine RTTI-Infos über die Methode an anderer Stelle.

Ich hab als Test mal das $METHODINFO raus, dann läufts. Scheint so als hätte BDS2006 da ein Problem,
wenn ich als Parameter einen Zeiger (egal ob typisiert oder pointer) benutzen will.


Ich weiß nicht, in wie weit das Problem noch in neueren Delphi-Versionen existiert, da sich da in Sachen RTTI ja einiges getan hat.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Published Methode und Zeiger

  Alt 6. Dez 2016, 09:01
Ich hab's mal kurz getestet. Folgender Code:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils;

{$METHODINFO on}
type
  TMyObject = class(TObject)
  private
  protected
  public
  published
    procedure DoSomething(aPointer: pointer);
  end;

{ TMyObject }

procedure TMyObject.DoSomething(aPointer: pointer);
begin

end;

begin
  try
    { TODO -oUser -cConsole Main : Code hier einfügen }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
liefert unter D2007
Zitat:
[DCC Fehler] Project1.dpr(18): F2084 Interner Fehler: D13360
Unter XE6 kompiliert's kommentarlos.
Uli Gerhardt
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Published Methode und Zeiger

  Alt 6. Dez 2016, 10:19
Jup..genau den bekomm ich auch unter 2006.

Ich schätz mal das das für neuere Versionen (pi mal daumen ab XE) wohl gefixt wurde.

Für meine Event-Liste hab ich (für besagte Ältere Versionen) einen andere Weg gefunden, um Zeiger als
Parameter übergeben zu können.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Published Methode und Zeiger

  Alt 6. Dez 2016, 10:54
Es kommt drauf an mit welchen RTTIFunktionen man das ausliest.

Die "neue" erweiterte RTTI hat standardmäßig auch Public-Methoden drin und selbst bis runter zu Private liestet die auf.
{$METHODINFO ON} wäre da nicht nötig. Das wird dann über {$RTTI METHODS([vcPublic, vcProtected, vcPrivate])} geregelt.
$2B or not $2B
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Published Methode und Zeiger

  Alt 6. Dez 2016, 11:35
Jap. Da ich aber nicht über die neue RTTI verfüge, krieg ich die Infos über die Parameter und Aufruf-Konventionen nur über die VMT und damit letztlich nur aus dem published Bereich.

Was mich verwundert ist nur, das bei obigem Beispiel der Compiler einen Fehler rauswirft (eben interner Fehler), während sowas:

Delphi-Quellcode:
$METHODINFO on}
type
  TMyObject = class(TObject)
  private
  protected
  public
  published
    procedure DoSomething(caption:widestring);
  end;
Kein Problem ist. Widestring ist ja (intern betrachtet) auch nix anderes als ein Pointer. Sogar var oder out Parameter (auch wieder nix anderes als Pointer) frist der Compiler ohne zu Mucken.

Nur eben Zeiger (egal ob typisiert oder untypisiert) mag er so garnicht in dem Bereich.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Published Methode und Zeiger

  Alt 6. Dez 2016, 16:29
Interne Compilerfehler ergeben in den seltensten Fällen einen logischen Sinn - es sind Defekte im Compilercode, die zu einem wie auch immer gearteten Fehler (AV oder sonstiges) führen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz