AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Generische Interface-GUIDs

Ein Thema von Dennis07 · begonnen am 12. Sep 2022 · letzter Beitrag vom 15. Jun 2023
Antwort Antwort
freimatz

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Generische Interface-GUIDs

  Alt 14. Sep 2022, 11:40
Entweder reden wir total aneinander vorbei oder ...
Wenn Du ein Modul in Delphi hast und dort eben TList<TBla> und ein anderes Modul in C# - wie übergibst Du dann sowas? Ich kenne Übergaben nur mit OLE wobei die Typen für die Schnittstelle in einer IDL definiert werden. Ich wüsste nicht ob und wie da Generics überhaupt gehen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Generische Interface-GUIDs

  Alt 14. Sep 2022, 12:23
Rein technisch sind die Generics oder nicht vollkommen egal-

Du könntest auf einer Seite auch eine generisches Interface haben und auf der anderen Seite ein Normales ... sie müssen nur die gleiche GUID haben und eine Tabelle von Methoden, die nichtmal gleich heißen müssen, weil es ist nur der Index wichtig, also die Reihenfolge/Anzahl und die Parameter-Definition und das was diese Methoden machen sollen.


Das Interface ist nur ein Zeiger.
Zum Prüfen und Konvertieren mit einer GUID ... will man nichts prüfen und auch nicht in ein anderes Interface casten, dann ist die GUID egal.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.979 Beiträge
 
Delphi 12 Athens
 
#3

AW: Generische Interface-GUIDs

  Alt 14. Sep 2022, 13:06
Entweder reden wir total aneinander vorbei oder ...
Wenn Du ein Modul in Delphi hast und dort eben TList<TBla> und ein anderes Modul in C# - wie übergibst Du dann sowas? Ich kenne Übergaben nur mit OLE wobei die Typen für die Schnittstelle in einer IDL definiert werden. Ich wüsste nicht ob und wie da Generics überhaupt gehen.
Ich habe eine allgemeine Schnittstelle geschrieben, mit der man Interfaces (inkl. generische Interfaces) direkt zwischen verschiedenen Modulen, konkret zwischen Delphi-Anwendungen, Delphi-DLLs und C#-Assemblys, austauschen kann. Man kann also einfach eine C#-Assembly laden, wobei durch die integrierten Klassen automatisch eine Verbindung etabliert wird. Danach kann man dann einfach über generische Methoden Interfaces anfragen, die in anderen Modulen registriert wurden.

Auf diese Weise kann ich mir einfach z.B. aus einer geladenen C#-DLL ein Interface IExample holen und die Methode Run aufrufen.
Delphi:
Delphi-Quellcode:
if TBlub.TryGet<IExample>(Example) then
  Example.Run(42);
C#:
Code:
if (Blub.TryGet<IExample>(ref Example))
{
  Example.Run(42);
}
Anders als mit anderen Lösungen brauche ich dafür keine Registrierung der Assembly oder ähnliche Voraussetzungen. Es funktioniert komplett portabel, sofern die verwendete .NET Version installiert ist. Man muss bei den Interfaces ein paar Regeln, z.B. für Strings (die Marshalling-Attribute brauchen), beachten, aber ansonsten ist das recht intuitiv nutzbar.

Auf Delphi-Seite klappt das auch mit generischen IList<T> Interfaces problemlos. Auf C#-Seite muss ich dafür wie schon geschrieben eine nicht-generische Klasse ableiten, aber auch da ist es mit wenigen Zeilen erledigt, die ich zudem nur kopieren und mit dem konkreten Typ versehen muss.

Aber ich glaube das führt hier zu weit...

Das Interface ist nur ein Zeiger.
Zum Prüfen und Konvertieren mit einer GUID ... will man nichts prüfen und auch nicht in ein anderes Interface casten, dann ist die GUID egal.
Ja, es wäre schön, wenn das auch bei C# ginge...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.979 Beiträge
 
Delphi 12 Athens
 
#4

AW: Generische Interface-GUIDs

  Alt 14. Jun 2023, 13:50
Der Beitrag ist nun schon älter, aber falls darüber mal jemand stolpert, möchte ich ergänzen, dass ich die angesprochene Funktionalität nun in neu geschriebener Form veröffentlicht habe:
https://www.delphipraxis.net/213199-...ng-dlls-c.html
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:27 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