2013-11-14 7 views
6

Attualmente sto scrivendo una libreria helper che si connette ai PLC della shop floor tramite Software Toolbox's TopServer.Late Binding to dll basato sull'architettura della CPU

La libreria TopServer ha versioni separate per architetture x86 e x64 e voglio caricare la versione appropriata in fase di esecuzione utilizzando l'associazione tardiva basata sull'architettura CPU del codice chiamante. I metodi nelle due librerie hanno le stesse firme.

Posso utilizzare reflection per caricare l'oggetto rilevante utilizzando il codice riportato di seguito, ma mi chiedo quale sia il metodo migliore per utilizzare questa istanza nel codice chiamante.

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); 
    } 
} 

Come sono l'associazione tardiva non ottengo i tipi di pre-runtime in modo pensava che la creazione di un'interfaccia basata sulle firme dei metodi librerie sarebbe un buon modo per implementare sia la versione.

Qualcuno ha una visione su questo metodo o raccomandazioni su altri metodi?

risposta

0

Se le DLL di destinazione variano solo in base all'architettura di destinazione e gli assembly sono non con un nome sicuro, non è necessaria un'interfaccia.

Il mio suggerimento è di denominarli rispettivamente _64.dll e * _86.dll e selezionarne uno da compilare.

Al runtime, tutto ciò che dovete fare è System.Reflection.Assembly.LoadFile il file corretto.

+0

Il problema con la compilazione di una versione specifica è che la dll compilata non funzionerà sull'altra architettura. Se compilo in x86 la dll Toolbox Software non verrà eseguita su un'architettura x64 –

+0

Stai compilando ** i tuoi ** assembly come 'Any CPU', 'x86' o 'x64'? – Gusdor

+0

Qualsiasi CPU sarebbe l'ideale. –