Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Delphi .Net Package Units "verstecken" (https://www.delphipraxis.net/98925-delphi-net-package-units-verstecken.html)

4dk2 4. Sep 2007 10:10


Delphi .Net Package Units "verstecken"
 
Hallo zusammen,

ich versuche ein Assembly zu erstellen was man von Delphi und auch VS.Net nutzen kann.
.Net Libary war mi da das sinnvollste, bis ich dann versucht habe die in eine Delphi .net Anwendung einzubinden.
Dann kam der schöne Fehler:
Zitat:

[Pascal Fatal Error] F2458 Cannot import metadata from Delphi 'library'. Use packages instead
Nach nem bisl rescher schieren hab ich dann rausgefunden das man nen in Delphi erstellte "LIBRARY" zwar in VS.net einbinden kann aber bei Delphi nicht.
naja muss man das verstehen?
Aber Egal, dacht ich mir probier ich es mal mit nem Package wie es der Compiler schon wollte.

Das ging dann auch ohne Probleme, bis darauf das man jetzt auf alle Units,funktionen und variablen im Package zugreifen kann.

Da ich ncoh nie nen Package gemacht habe erstmal hilfe nachgeschaut...
Gibt eine Compiler Direktive
Delphi-Quellcode:
{$DENYPACKAGEUNIT ON}
, aber der Compiler schmeisst dann beim erstellen folgenden Fehler raus.

[Pascal Error] E2223 $DENYPACKAGEUNIT 'unit2' cannot be put into a package

Was ich also haben will ist, dass in Unit1 z.b. eine Klasse ist die man von aussen nutzen kann.
Und in unit2 die Funktionen die die klasse aufruft, die versteckt sein sollen.

Danke schon mal für eure Antworten
Karsten

Elvis 4. Sep 2007 10:33

Re: Delphi .Net Package Units "verstecken"
 
Delphi.Net kannst du für solche Dinge komplett vergessen '(IMO kann man das immer, aber hier ganz besonders).
D.Net hat keinerlei Ahnung für Sichtbarkeit von Typen. (nur für verschachtelte Subtypen)
Willst du das in Pascal schreiben kannst du entweder Chrome nehmen, oder dich zu den Masochisten gesellen, die sich sogar extra Tools schreiben um Delphi-typen von hinten, durch die Brust ins Auge, zu verstecken.
Du kannst das also realistisch angehen, und C# nehmen, bzw Chrome, wenn es unbedingt Pascal sein muss. Oder du nimmst Delphi und deine Assemblies werden dich zwingen, extra die Borland.Delphi.dll mitzugeben.
Außerdem ist eine Assembly, die mit Delphi.Net kompiliert wurde absolut mega-inkompatibel mit jeder anderen Version von Delphi.Net.
Das ist bei keiner anderen .Net-Sprache so, die ich bisher probiert habe.

4dk2 4. Sep 2007 13:35

Re: Delphi .Net Package Units "verstecken"
 
danke für deine schnelle Antwort Elvis,
aber ich muss dir nen bisl widersprechen.

Zitat:

Oder du nimmst Delphi und deine Assemblies werden dich zwingen, extra die Borland.Delphi.dll mitzugeben.
ich weiss nicht welches Delphi du hast, aber bei mir (BDS 2006) steht bei nem neuen package
Delphi-Quellcode:
package Package1;
...
requires
  borland.delphi;
schmeisst man das borland.delphi raus, gehts bei mir auch ohne irgendwelche zusätzlichen dlls in VS.net
(auf dem system wo ich vs.net habe ist nichts von borland installiert)

Aber hab die ganze zeit schon rumgebastelt.
Wenn ich das ganze als Libary mache, wird auch alles exportiert. unterschied ist nur das Delphi selbst nicht mehr drankommt. Und das ohne irgendeine Exportanweisung.

Wie deklariert man den sowas unter C#, oder wird da auch immer alles exportiert ?

Elvis 4. Sep 2007 14:44

Re: Delphi .Net Package Units "verstecken"
 
Zitat:

Zitat von 4dk2
danke für deine schnelle Antwort Elvis,
aber ich muss dir nen bisl widersprechen.
...
schmeisst man das borland.delphi raus, gehts bei mir auch ohne irgendwelche zusätzlichen dlls in VS.net

Jupp, und du kannst sie nicht mehr in Delphi benutzen.
Deshlab musst du die RTL von D.Net mitliefern oder akzeptieren, dass es in D.Net nicht geht.

Zitat:

Aber hab die ganze zeit schon rumgebastelt.
Wenn ich das ganze als Libary mache, wird auch alles exportiert. unterschied ist nur das Delphi selbst nicht mehr drankommt. Und das ohne irgendeine Exportanweisung.
Eine Library ist gedacht als eine DLL mit unmanaged Exports, also Funktionen, die native Anwendungen importieren können.
Das interessiert dich hier ja nicht, du willst einfach nur ein paar der Klassen in C# sehen, right?[quote]Wie deklariert man den sowas unter C#, oder wird da auch immer alles exportiert ?[/delphi]
Code:
class Someclass { }
Ohne Sichtbarkeits-modifizierer wird autom. "Internal" genommen, und das heißt, dass etwas nur innerhalb einer Assembly sichtbar ist.
In Chrome wäre das eine Deklaration wie sie in Delphi aussehen würde:
Delphi-Quellcode:
SomeClass = class end;
Eine Klasse, die öffentlich sichtbar wäre, sähe so aus:
C#
Code:
public class Someclass { }
Chrome
Delphi-Quellcode:
SomeClass = public class end;

Heffalump 4. Sep 2007 14:47

Re: Delphi .Net Package Units "verstecken"
 
Delphi versucht zu erkennen, ob es eine mit Delphi geschriebene DLL ist und dabei macht Delphi allerhand murx. Es gibt mit .Net keine Packages, aber die Borländer, CodeGearer versuchen da etwas zu platzieren, was da nicht hingehört und das geht gehörig in die Hose. VS oder auch SharpDevelop geht bei einem Assembly davon aus, dass das eben auch nur ein Assembly ist. Delphi macht das leider nicht. So sehr es mich auch schmerzt, aber wenn Du was mit .Net machen willst, schau Dich nach einer anderen IDE um, die das .Net Framework auch so verwendet, wie es gedacht war (VS oder SharpDevelop zum Beispiel).


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