Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   Delphi Kann keinen Constructor aufrufen (https://www.delphipraxis.net/215020-kann-keinen-constructor-aufrufen.html)

DerMondistunsereSonne 23. Apr 2024 15:48

Kann keinen Constructor aufrufen
 
Moin,

Ich habe aus einer C# DLL eine TLB erstellt und diese als registriert (com-visible, für com-interop), dann die TLB in Delphi hinzugefügt und nun versuche ich dort den Constructor aufzurufen:

Delphi-Quellcode:
var
   prozent: TDecimal;
   ust19: TaxRate;
begin
   CoInitialize(self);
   ust19 := ust19.Create(self);
Die TLB:
Delphi-Quellcode:
// *********************************************************************//
// Die Klasse CoTaxRate stellt die Methoden Create und CreateRemote zur
// Verfügung, um Instanzen des Standard-Interface _TaxRate, dargestellt
// von CoClass TaxRate, zu erzeugen. Diese Funktionen können
// von einem Client verwendet werden, der die CoClasses automatisieren
// will, die von dieser Typbibliothek dargestellt werden.
// *********************************************************************//
  CoTaxRate = class
    class function Create: _TaxRate;
    class function CreateRemote(const MachineName: string): _TaxRate;
  end;

// *********************************************************************//
// OLE-Server-Proxy-Klassendeklaration
// Server-Objekt    : TTaxRate
// Hilfe-String     :
// Standard-Interface: _TaxRate
// Def. Intf. DISP?  : No
// Ereignis-Interface:
// TypeFlags        : (0)
// *********************************************************************//
  TTaxRate = class(TOleServer)
  private
    FIntf: _TaxRate;
    function GetDefaultInterface: _TaxRate;
  protected
    procedure InitServerData; override;
    function Get_ToString: WideString;
    function Get_type_: WideString;
    procedure Set_type_(const pRetVal: WideString);
    function Get_Category: WideString;
    procedure Set_Category(const pRetVal: WideString);
    function Get_Percentage: TDecimal;
    procedure Set_Percentage(pRetVal: TDecimal);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Connect; override;
    procedure ConnectTo(svrIntf: _TaxRate);
    procedure Disconnect; override;
    function Equals(obj: OleVariant): WordBool;
    function GetHashCode: Integer;
    function GetType: _Type;
    property DefaultInterface: _TaxRate read GetDefaultInterface;
    property ToString: WideString read Get_ToString;
    property type_: WideString read Get_type_ write Set_type_;
    property Category: WideString read Get_Category write Set_Category;
    property Percentage: TDecimal read Get_Percentage write Set_Percentage;
  published
  end;
Allerdings ist das Create() ein undeklarierter Bezeichner...jemand einen Hinweis für mich?

Danke!

Sherlock 23. Apr 2024 15:56

AW: Kann keinen Constructor aufrufen
 
Hast Du das T bei TTaxRate nur hier vergessen, oder auch in Deinem Code?

Zitat:

Zitat von DerMondistunsereSonne (Beitrag 1536059)
Moin,
Delphi-Quellcode:
var
   prozent: TDecimal;
   ust19: TaxRate;
begin
   CoInitialize(self);
   ust19 := ust19.Create(self);


DerMondistunsereSonne 23. Apr 2024 16:03

AW: Kann keinen Constructor aufrufen
 
Auch in meinem Code...danke.

Uwe Raabe 23. Apr 2024 16:14

AW: Kann keinen Constructor aufrufen
 
Nichtsdestotrotz bleibt dieser Aufruf falsch:
Delphi-Quellcode:
ust19 := ust19.Create(self);
. Richtig wäre:
Delphi-Quellcode:
ust19 := TTaxRate.Create(self);

DerMondistunsereSonne 23. Apr 2024 16:20

AW: Kann keinen Constructor aufrufen
 
Japp, das ist schon korrigiert...ist halt nicht immer ein Vorteil in 3 Sprachen gleichzeitig unterwegs zu sein :roll:

himitsu 23. Apr 2024 17:01

AW: Kann keinen Constructor aufrufen
 
Create ist eine "Funktion", wenn es vom Objekt aufgerufen wird und erstellt vorher keinen Speicher, es initialisiert den Speicher nur ... macht Delphi bloß dann, wenn es über die Klasse aufgerufen wird (vor dem Ausführen der Create-Methode)


Delphi-Quellcode:
ust19 := TTaxRate(TTaxRate.NewInstance); // ODER TObject(ust19) := TTaxRate.NewInstance;
ust19.Create(Self);
:duck:

DerMondistunsereSonne 24. Apr 2024 08:06

AW: Kann keinen Constructor aufrufen
 
Danke für den Hinweis!

himitsu 24. Apr 2024 13:51

AW: Kann keinen Constructor aufrufen
 
Delphi nutzt das an einer Stelle, also im Application.CreateForm in der DPR.

Dadurch kann die Instanz schon vor dem Create in die globale Variable geschrieben werden, falls dann beim Laden der DFM oder im Constructor auf diese globale Variable zugegriffen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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 by Thomas Breitkreuz