![]() |
Delphi-Version: 2006
Published Methode und Zeiger
Öhm...beim testen meiner Event-Liste fällt mir grad was auf.
Das
Delphi-Quellcode:
quitiert der Compiler mit einem internen Fehler. Verschieb ich die Methode in den Public-Bereich
{$Methodinfo on}
Type TMyObject = Class(TObject) private protected public published Procedure DoSomething(aPointer:pointer); funzt er wider. Ist das in neueren Versionen auch so ? Warum ? :shock: |
AW: Published Methode und Zeiger
Interne Fehler hab ich och öfters.
Aber muß die Methode überhaut unbedingt published sein? |
AW: Published Methode und Zeiger
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. |
AW: Published Methode und Zeiger
Ich hab's mal kurz getestet. Folgender Code:
Delphi-Quellcode:
liefert unter D2007
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. Zitat:
|
AW: Published Methode und Zeiger
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. |
AW: Published Methode und Zeiger
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.
Delphi-Quellcode:
wäre da nicht nötig. Das wird dann über
{$METHODINFO ON}
Delphi-Quellcode:
geregelt.
{$RTTI METHODS([vcPublic, vcProtected, vcPrivate])}
|
AW: Published Methode und Zeiger
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:
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.
$METHODINFO on}
type TMyObject = class(TObject) private protected public published procedure DoSomething(caption:widestring); end; Nur eben Zeiger (egal ob typisiert oder untypisiert) mag er so garnicht in dem Bereich. |
AW: Published Methode und Zeiger
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz