Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente für 32 als auch 64 Bit (https://www.delphipraxis.net/192988-komponente-fuer-32-als-auch-64-bit.html)

JYPDWhite 8. Jun 2017 16:04

Komponente für 32 als auch 64 Bit
 
Hallo,

ich habe bereits gesucht und auch hier in der DP zwei Threads zum Thema gefunden, jedoch bin ich daraus leider nicht so richtig schlau geworden.

Ich habe hier ein Package was 3 Komponenten beinhaltet.
Die Anwendungen die die Komponenten bis jetzt verwendet haben waren 32 Bit VCL Anwendungen. Bei denen ist es kein Problem die Komponenten im Designer per Drag and Drop von der Komponentenleiste auf das Formular zu ziehen.

Jetzt möchte ich eine Anwendung erstellen die als 64bit kompiliert werden soll, diese soll auch die Komponenten nutzen. Dazu habe folgendes probiert
1. Im Package als Buildziel 64 Bit hinzugefügt
2. Erstes Package auf "nur Laufzeit" umgestellt und dem das Buildziel 64bit hinzugefügt. 2. Package erstellt dieses auf "Designzeit" eingestellt. Im 2. Package die register procedures aus dem ersten Packet eingefügt. und das Package installiert
3. wie 2. aber 2 "Laufzeit" Packages erzeugt eins für 32 bit und eins für 64 bit. Und ein drittes Package was die "Designzeit" Register procedure enthält.


keine der Versuche hat leider zum Erfolg geführt. Delphi graut mir meine Komponenten bei 64Bit Anwendungen weiterhin aus und zeigt im Tooltip an dass diese Komponenten nur für 32Bit vorhanden sind.

Was habe ich übersehen? Muss ich irgendwelche Suchpfade oder Bibliothekspfade umstellen?

Über Hilfe wäre ich sehr dankbar. Ein Beispielprojekt kann ich nicht direkt zur Verfügung stellen da ich nicht die Berechtigung habe die Packages zu veröffentlichen.

Danke schon mal im Voraus.

Uwe Raabe 8. Jun 2017 16:22

AW: Komponente für 32 als auch 64 Bit
 
Normalerweise sollte es genügen, wenn du das Laufzeit-Packge bzw. das Entwurfs- und Laufzeit-Package mit beiden Plattformen anlegst. Wichtig ist, daß beim Compilieren des Win32-Package die Win64-Plattform schon vorhanden ist. Diese Information wird im Win32-Package hinterlegt, denn das ist ja das, was die IDE lädt.

Fritzew 8. Jun 2017 16:24

AW: Komponente für 32 als auch 64 Bit
 
Deklariere die Komponenten so:
Delphi-Quellcode:
type
  [ComponentPlatformsAttribute(pidWin32 or pidWin64)] // Only supported on Win32 and Win64
  TMyComponent = class(TComponent)
  private
    ...
  end;
damit ist die Komponente für 32 und 64 Bit erlaubt.

Das sind die aktuell erlaubten PID* :
Zitat:

[ComponentPlatformsAttribute(pidWin32 or pidWin64 or pidOSX32 or
pidiOSSimulator or pidiOSDevice32 or pidiOSDevice64 or pidAndroid or
pidLinux64)]

Uwe Raabe 8. Jun 2017 16:27

AW: Komponente für 32 als auch 64 Bit
 
Zitat:

Zitat von Fritzew (Beitrag 1373896)
Delphi-Quellcode:
type
  [ComponentPlatformsAttribute(pidWin32 or pidWin64)] // Only supported on Win32 and Win64

Das ist aber nur notwendig, wenn das Package Komponenten enthält, die nicht für alle Plattformen des Projekts verfügbar sind.

Rollo62 8. Jun 2017 16:30

AW: Komponente für 32 als auch 64 Bit
 
Nur mal interessehalber, ich gehe davon aus das dies hier nicht funktiniert:

Delphi-Quellcode:
type
  [ComponentPlatformsAttribute(pidWin32)] // Only supported on Win32 
  TMyComponent = class(TComponent)
  private
    ...
  end;

type
  [ComponentPlatformsAttribute(pidWin64)] // Only supported on Win64 slighlty different
  TMyComponent = class(TComponent)
  private
    ...
  end;

Fritzew 8. Jun 2017 16:33

AW: Komponente für 32 als auch 64 Bit
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1373898)
Zitat:

Zitat von Fritzew (Beitrag 1373896)
Delphi-Quellcode:
type
  [ComponentPlatformsAttribute(pidWin32 or pidWin64)] // Only supported on Win32 and Win64

Das ist aber nur notwendig, wenn das Package Komponenten enthält, die nicht für alle Plattformen des Projekts verfügbar sind.

Ja so sollte es sein, bei uns ist es aber häufig aufgetreten dass ohne diese Flags, die Komponenten nicht für Win64 angezeigt wurden.

Fritzew 8. Jun 2017 16:35

AW: Komponente für 32 als auch 64 Bit
 
Zitat:

Zitat von Rollo62 (Beitrag 1373901)
Nur mal interessehalber, ich gehe davon aus das dies hier nicht funktiniert:

Delphi-Quellcode:
type
  [ComponentPlatformsAttribute(pidWin32)] // Only supported on Win32 
  TMyComponent = class(TComponent)
  private
    ...
  end;

type
  [ComponentPlatformsAttribute(pidWin64)] // Only supported on Win64 slighlty different
  TMyComponent = class(TComponent)
  private
    ...
  end;

Du meinst 2 * der gleiche Name aber unterschiedlich in der Platform?

Nein das geht nicht. Es gelten ja die normalen Regeln für den Compiler. Das andere sind Attribute die zur Runtime ausgewertet werden

JYPDWhite 8. Jun 2017 16:57

AW: Komponente für 32 als auch 64 Bit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Uwe Raabe (Beitrag 1373893)
Normalerweise sollte es genügen, wenn du das Laufzeit-Packge bzw. das Entwurfs- und Laufzeit-Package mit beiden Plattformen anlegst. Wichtig ist, daß beim Compilieren des Win32-Package die Win64-Plattform schon vorhanden ist. Diese Information wird im Win32-Package hinterlegt, denn das ist ja das, was die IDE lädt.

Habe ich eigentlich probiert hat bei mir im Test nicht funktioniert.
Ich habe jetzt im Anhang eine Testkomponente die unter 32 Bit verwendbar ist und unter 64 Bit nicht. Eventuell kommen wir ja so weiter.

Edit: Verwendete Delphiversion ist XE²

Rollo62 8. Jun 2017 17:01

AW: Komponente für 32 als auch 64 Bit
 
Ok, dann vielleicht in Kombination mit $IFDEFs, die Attribute steuern dann wohl nur die Anzeige im Designer.
Macht aber wahrscheinlich sowieso wenig Sinn so extrem unterschiedliche Versioen zu haben,
dass man verschiedene Klassen bräuchte.
Ich würds definitiv dann auch eher in Unterklassen auslagen was spezifisch ist.

Rollo

Fritzew 8. Jun 2017 17:12

AW: Komponente für 32 als auch 64 Bit
 
Zitat:

Zitat von JYPDWhite (Beitrag 1373909)
Zitat:

Zitat von Uwe Raabe (Beitrag 1373893)
Normalerweise sollte es genügen, wenn du das Laufzeit-Packge bzw. das Entwurfs- und Laufzeit-Package mit beiden Plattformen anlegst. Wichtig ist, daß beim Compilieren des Win32-Package die Win64-Plattform schon vorhanden ist. Diese Information wird im Win32-Package hinterlegt, denn das ist ja das, was die IDE lädt.

Habe ich eigentlich probiert hat bei mir im Test nicht funktioniert.
Ich habe jetzt im Anhang eine Testkomponente die unter 32 Bit verwendbar ist und unter 64 Bit nicht. Eventuell kommen wir ja so weiter.

Edit: Verwendete Delphiversion ist XE²

Verwende ein Projekt für das Runtimepackage. Kompiliere dieses für beide Plattformen.
DAs Designtimepackage natürlich nur 32 Bit, geht auch nicht anders.
Das sollte reichen....


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Seite 1 von 2  1 2      

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