Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   In-Process COM TFont kann nicht TFont zugewiesen werden (https://www.delphipraxis.net/160449-process-com-tfont-kann-nicht-tfont-zugewiesen-werden.html)

Boppe 13. Mai 2011 15:15

In-Process COM TFont kann nicht TFont zugewiesen werden
 
Hallo zusammen!
nach gescheiterten Versuchen den Aufbau eines Grids (QuantumGrid) in Packages auszulagern, dachte ich mir, ich könnte mich mal mit Com austoben.

Vorab muß ich sagen, dass das Thema Com für mich gänzlich neu ist.

Dlls geschrieben, registriert...alles wunderbar....

Nach dem Aufruf bzw der Zuweisung meines Objects zum Grid erhalte ich allerdings den Fehler "TFont kann nicht TFont zugewiesen werden". Sollte genau dies denn hier nicht Auftauchen da bei einem In-Process Server der selbe Adressraum wie die Exe verwendet wird?

Bin ich mit meinem Ansatz komplett auf dem Holzweg?

Grüße
B.

Bernhard Geyer 13. Mai 2011 15:39

AW: In-Process COM TFont kann nicht TFont zugewiesen werden
 
Dein COM-Server und die Exe haben zwei getrennte Implementierungen der Klassenbibliothek.
TObject(COM) != TObject(Exe) und damit schlagen is/as-Abfragen fehl.

himitsu 13. Mai 2011 15:41

AW: In-Process COM TFont kann nicht TFont zugewiesen werden
 
Darum wurden die Laufzeitpackages (BPL) erfunden,
diese teilen sich eine RTTI und somit haben sie überall den selben Typen.

Boppe 13. Mai 2011 16:42

AW: In-Process COM TFont kann nicht TFont zugewiesen werden
 
Hi!
Danke für eure Antworten.

Also komplett auf dem Holzweg mit meinem Ansatz.....:evil:

Bei der Package Lösung kommt dann wieder mein Lizenz Problem aus vorigem Post in´s Spiel.

Dann wird´s wohl doch darauf hinauslaufen, dass ich das ganze doch direkt mit in die Exe packe.

Grüße
B.

Boppe 13. Mai 2011 17:03

AW: In-Process COM TFont kann nicht TFont zugewiesen werden
 
Hab nochmal ein bisschen in DP gestöbert und bin auf folgendes Thema gestoßen DP

Zitat:

..Der obige Ansatz über IUnknown und COM Interfaces zu gehen ist dagegen richtig in diesem Falle.
...
Also bin ich doch nicht so ganz auf dem Holzweg. Aber kann mir jemand sagen wie ich das realisieren kann?

shmia 13. Mai 2011 17:26

AW: In-Process COM TFont kann nicht TFont zugewiesen werden
 
Entscheidend ist, wie du deine Anwendung in Einzelstücke zerschneidest.
Dein Schnitt verläuft direkt durch die GUI wenn ich das richtig verstanden habe.
Du möchtest QuantumGrid auslagern; da kann ich nur sagen "vergiss es".
Wenn du durch die GUI schneiden möchtest, dann gibt es bei Delphi nur 2 Möglichkeiten:
Packages und ActiveX-Controls.
Packages hast du schon verworfen und ActiveX-Controls werden zu einem Drama, dass den Aufwand nicht lohnt.

Das heisst jetzt aber nicht, dass du keine COM-DLLs verwenden sollst.
Der Schnitt darf nur nicht durch die GUI verlaufen.
Ein Beispiel: deine Anwendung soll EMails versenden können.
Dann könnte man folgendes Interface deklarieren:
Delphi-Quellcode:
  ISendMail = interface(IDispatch) // etwas vereinfacht
    ['{XXXXXXXX-A104-4C06-999F-XXXXXXXXXXXX}']
    procedure DoSendMail; safecall;
    procedure ClearAllRecipients; safecall;
    property FromAddr: WideString read Get_FromAddr write Set_FromAddr;
    property ToAddr: IStrings read Get_ToAddr;
    property CcAddr: IStrings read Get_CcAddr;
    property BccAddr: IStrings read Get_BccAddr;
    property MapiShowDialog: WordBool read Get_MapiShowDialog write Set_MapiShowDialog;
    property EMaildirectory: WideString read Get_EMaildirectory write Set_EMaildirectory;
    property SmtpHost: WideString read Get_SmtpHost write Set_SmtpHost;
    property SmtpUser: WideString read Get_SmtpUser write Set_SmtpUser;
    property SmtpPassword: WideString read Get_SmtpPassword write Set_SmtpPassword;
    property BodyText: WideString read Get_BodyText write Set_BodyText;
    property EMailMode: EnumEMailMode read Get_EMailMode write Set_EMailMode;
    property Subject: WideString read Get_Subject write Set_Subject;
    property ReplyTo: WideString read Get_ReplyTo write Set_ReplyTo;
    property Attachments: IAttachments read Get_Attachments;
  end;
Dieses Interface und die COM DLL braucht keine GUI und funktioniert ohne Probleme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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