2013-11-14 15 views
6

Ich schreibe gerade eine Hilfsbibliothek, die über Software Toolbox's TopServer mit Fertigungs-SPS verbunden wird.Späte Bindung an DLL basierend auf der CPU-Architektur

Die TopServer-Bibliothek hat separate Versionen für x86- und x64-Architekturen und ich möchte die entsprechende Version zur Laufzeit mit späte Bindung basierend auf der CPU-Architektur des aufrufenden Codes laden. Die Methoden in den beiden Bibliotheken haben die gleichen Signaturen.

Ich kann Reflection verwenden, um das relevante Objekt mit dem folgenden Code zu laden, aber ich frage mich, was die beste Methode ist, diese Instanz im aufrufenden Code zu verwenden.

public class LateBinding 
{ 
    public static T GetInstance<T>(string dllPath, string fullyQualifiedClassName) where T : class 
    { 
     Assembly assembly = System.Reflection.Assembly.LoadFile(dllPath); 
     Type t = assembly.GetType(fullyQualifiedClassName); 

     return (T)Activator.CreateInstance(t); 
    } 
} 

Als ich die späte Bindung bin ich nicht bekommen, die Typen Pre-runtime so dachte, dass basierend eine Schnittstelle zu schaffen auf der Bibliotheken Methodensignaturen wäre eine gute Möglichkeit, sowohl Version zu implementieren.

Hat jemand eine Sicht auf diese Methode oder Empfehlungen zu anderen Methoden?

Antwort

0

Wenn die Ziel-DLLs nur nach Zielarchitektur variieren und die Assemblies nicht stark benannt sind, ist keine Schnittstelle erforderlich.

Mein Vorschlag ist, sie zu benennen * _64.dll und * _86.dll jeweils und wählen Sie eine kompilieren gegen.

Zur Laufzeit müssen Sie nur die korrekte Datei System.Reflection.Assembly.LoadFile eingeben.

+0

Das Problem mit dem Kompilieren zu einer bestimmten Version ist, dass diese kompilierte DLL auf der anderen Architektur nicht funktioniert. Wenn ich nach x86 kompiliere, wird die Software Toolbox DLL nicht auf einer x64 Architektur laufen –

+0

Kompilieren Sie ** Ihre ** Assemblies als 'Any CPU', 'x86' oder 'x64'? – Gusdor

+0

Jede CPU wäre das ideale. –