AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Assembly bedingt einbinden

Ein Thema von WM_CLOSE · begonnen am 14. Jul 2011 · letzter Beitrag vom 20. Jul 2011
Antwort Antwort
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Assembly bedingt einbinden

  Alt 14. Jul 2011, 15:39
Guten Tag,

Ich hätte da mal folgende Frage:

Ich habe eine Anwendung, die auf eine Assembly-dll zugreift.
Diese dll ist in verschiedenen Versionen verfügbar, die jeweils komplett anders funktionieren.

Leider weiss ich nicht, welche der dlls beim Anwender installiert sein werden.

Gibt es eine Möglichkeit eine Assembly bedingt (je nachdem welche vorhanden ist) einzubinden?
Delphi programming
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.605 Beiträge
 
#2

AW: Assembly bedingt einbinden

  Alt 14. Jul 2011, 21:23
Du kannst mit der App-config steuern, welche Version eines Assemblies genutzt werden soll, wenn mehrere vorhanden sein sollten.

Wenn diese anders anprogrammiert werden müssen, so müsstest Du von dem geladenen Assembly die Version auslesen und entsprechend verzweigen.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#3

AW: Assembly bedingt einbinden

  Alt 15. Jul 2011, 16:54
Ich danke dir für die Antwort.

Aber genauer gesagt geht es mehr darum, verschiedene Assemblys einzubinden.
Also entweder x.dll oder y.dll.

Die Dlls haben auch unterschiedliche Namen/Namensräume.

Das Problem dabei:
wenn ich beide dlls zu den Verweisen hinzufüge, aber nur eine vorhanden ist, kommt beim Start der Anwendung (bzw. kurz davor)
Die Meldung "Die Assembly 'x' konnte nicht geladen werden" (oder so ähnlich, habs nicht im Kopf)
Delphi programming
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.605 Beiträge
 
#4

AW: Assembly bedingt einbinden

  Alt 15. Jul 2011, 16:58
Ah. Das ist nicht so einfach. Du musst das dann dynamisch einladen mittels Assembly.Load().
Problematisch ist dann lediglich, dass Du eben keine Referenzen im Code hast, also musst Du die Klassen und Methoden mittels Reflection ermitteln und aufrufen. Ist ziemlich eklig, wenn Du kein Interface hast gegen das Du programmieren kannst. Die würde ich dann erstellen und Wrapperklassen schreiben die die API dann 1:1 per Reflection rausreichen. Ne andere Idee hab ich leider nicht, wenn Du keinen Einfluss auf die Fremd-Assemblies hast.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#5

AW: Assembly bedingt einbinden

  Alt 20. Jul 2011, 05:48
Mit Interfaces ist das aber obersimpel

Code:
public IMyInterface GetInstanceFromFile (string filename)
{
  Assembly assembly = Assembly.LoadFile(filename);
  foreach (Type type in assembly.GetTypes())
    if (type.IsClass && type.IsPublic)
      if (type.GetInterfaces().Contains(typeof(IMyInterface)))
        return (IMyInterface)Activator.CreateInstance(type);
}
Das Bild hängt schief.
  Mit Zitat antworten Zitat
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 01:07 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