Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   Richtlinie für C#.dll (https://www.delphipraxis.net/215029-richtlinie-fuer-c-dll.html)

DerMondistunsereSonne 25. Apr 2024 10:49

Richtlinie für C#.dll
 
Moin,

Weiß jemand, ob es so etwas wie eine Richtlinie gibt, wie man eine ComDll erstellt, damit diese in Delphi per TLB verwendet werden kann? Bislang habe ich herausgefunden, dass die Konstruktoren keine Übergabeparamter enthalten dürfen und Variablen nicht nullable sein dürfen. Weiß da jemand mehr?

himitsu 25. Apr 2024 11:30

AW: Richtlinie für C#.dll
 
Das mit dem "keine" Parameter stamm schon aus C++ ... drum wirft Delphi bei sowas auch eine Warnung, wenn man selber Derartiges im Delphi programmieren will.

Nullable, da müsstest du selber die Parameter behandeln, da Delphi (noch) keine eigenen Typen dafür besitzt.
Sie bauen seit Jahren an eigenen Nullabls, aber ob die dann auch noch kompatible mit denen von C# sind .... keine Ahnung.

DerMondistunsereSonne 25. Apr 2024 11:35

AW: Richtlinie für C#.dll
 
Es geht mir gerade weniger, wie ich das in Delphi behandel, sondern eher, was ich in meiner DLL beachten muss. Ich erstelle aktuell beide Dateien.

Wie sieht es mit Lambda-Asdrücken oder public List<T> { get; } = new List<T>();?

jaenicke 25. Apr 2024 14:06

AW: Richtlinie für C#.dll
 
Den Weg kann man gehen, aber viel einfacher ist, wenn du eine einfache native DLL daraus machst. Ich habe dafür dieses Open Source Projekt gestartet:
https://github.com/jaenicke/appcentral
Damit kannst du einfach die C#-DLL ablegen, mit TAppCentral.LoadPlugin in Delphi laden und dann Interfaces beidseitig registrieren und abrufen. Alles, was in ein Com-Interface passt, sollte damit auch möglich sein.

Das HowTo ist kurz, muss dafür aber genau beachtet werden. Dann sollte es in wenigen Minuten funktionieren.

Generische Listen funktionieren eingeschränkt, in dem Sinn, dass man den Listencode nicht mehrfach schreiben muss. Das habe ich noch nicht veröffentlicht. Ganz ohne Tricks geht es aber nicht. Wenn hier Interesse besteht, kann ich kurzfristig entsprechenden Code ergänzen.

Zitat:

Zitat von DerMondistunsereSonne (Beitrag 1536118)
Wie sieht es mit Lambda-Asdrücken oder public List<T> { get; } = new List<T>();?

Bei Lambda-Ausdrücken bin ich mir nicht sicher, wie du die nach außen geben möchtest, aber die Antwort dürfte nein sein. Generics gehen über COM und TLB nicht.

DerMondistunsereSonne 26. Apr 2024 05:46

AW: Richtlinie für C#.dll
 
Vielen Dank Sebastian! Ich schaue es mir heute einmal an. Ja Interesse besteht!

jaenicke 26. Apr 2024 07:13

AW: Richtlinie für C#.dll
 
Ich schaue es mir in den nächsten Tagen an. Ich habe dafür schon Code, aber ich schaue noch einmal drüber.

Hier übrigens der Link zur Projektvorstellung hier in der DP:
https://www.delphipraxis.net/213199-...ng-dlls-c.html

Schön finde ich daran vor allem, dass es nur wenig Code ist, nicht so groß wie andere Lösungen in dieser Richtung.

DeanWare 4. Okt 2024 04:54

AW: Richtlinie für C#.dll
 
Hallo,

Ja, es gibt einige Richtlinien, die beachtet werden sollten, wenn du eine COM-DLL erstellst, die in Delphi über eine TLB (Typbibliothek) verwendet werden soll. Neben den bereits erwähnten Punkten, dass Konstruktoren keine Übergabeparameter haben dürfen und Variablen nicht nullable sein dürfen, gibt es noch ein paar zusätzliche Best Practices:

Interface-Deklaration: Stelle sicher, dass alle Interface-Methoden eindeutig sind und keine optionalen Parameter verwenden.

Registrierung der DLL: Die COM-DLL muss korrekt registriert werden, damit Delphi sie erkennt und die TLB importieren kann.

Methodensignaturen: Verwende möglichst einfache Typen (wie Integer, String, etc.) für die Parameter der Methoden, um Kompatibilitätsprobleme zu vermeiden.

Kompatibilität prüfen: Überprüfe die TLB in Delphi nach der Erstellung der COM-DLL, um sicherzustellen, dass alles korrekt interpretiert wird.

Es könnte sich auch lohnen, die offiziellen Dokumentationen von Delphi und Microsoft COM durchzusehen, um weitere Details zu finden.

Viele Grüße! :)


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