AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Richtlinie für C#.dll

Ein Thema von DerMondistunsereSonne · begonnen am 25. Apr 2024 · letzter Beitrag vom 4. Okt 2024
Antwort Antwort
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
40 Beiträge
 
Delphi 12 Athens
 
#1

Richtlinie für C#.dll

  Alt 25. Apr 2024, 11:49
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Richtlinie für C#.dll

  Alt 25. Apr 2024, 12:30
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.
$2B or not $2B
  Mit Zitat antworten Zitat
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
40 Beiträge
 
Delphi 12 Athens
 
#3

AW: Richtlinie für C#.dll

  Alt 25. Apr 2024, 12:35
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>();?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Richtlinie für C#.dll

  Alt 25. Apr 2024, 15:06
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.

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
DerMondistunsereSonne

Registriert seit: 9. Apr 2024
40 Beiträge
 
Delphi 12 Athens
 
#5

AW: Richtlinie für C#.dll

  Alt 26. Apr 2024, 06:46
Vielen Dank Sebastian! Ich schaue es mir heute einmal an. Ja Interesse besteht!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Richtlinie für C#.dll

  Alt 26. Apr 2024, 08:13
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
DeanWare

Registriert seit: 4. Okt 2024
1 Beiträge
 
#7

AW: Richtlinie für C#.dll

  Alt 4. Okt 2024, 05:54
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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.
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