Ralf00
14-02-2009, 07:49
Ciao, allora ho il seguente problema:
ho cercato dappertutto il sistema per importare dinamicamente classe metodi e altro da una dll esterna e ho trovato il sistema chiamato Reflection. Allora io agisco in questo modo
using System;
using System.Collections.Generic;
using System.Text;
namespace KeyCrypt
{
interface KeyCrypting
{
string fileconvert(string path);
double version();
string idcheck();
}
}
Ora vorrei implementare i metodi a mio piacimento e realizzo:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace KeyCrypt
{
class BlaBla : KeyCrypting
{
private double cryptversion = 1.0;
string fileconvert(string path)
{
return "fileconvert";
}
double version()
{
return cryptversion;
}
string idcheck()
{
return "ciaciao";
}
}
}
Tutto ciò nel mio progetto di libreria, compilo e ottengo la mia bella dll. Quindi vado nel sorgente dove mi serve e faccio:
Assembly a = Assembly.LoadFile(KryptingKeyPath);
foreach (Type tipo in a.GetTypes())
if (tipo.GetInterface("KeyCrypting") != null)
{
KeyCrypting skeycript = (KeyCrypting)Activator.CreateInstance(tipo);
String b= skeycript.ToString();
}
Compila e funziona anche questo (KryptingKeyPath è una stringa dove c'è il percorso corretto della mia dll precedentemente compilata), però arriva all'istruzione dove deve creare l'oggetto e mi da InvalidCastException dicendo che la classe Blabla non può essere castata a KeyCrypting quando invece la implementa e mi compila la dll :(
Qualcuno sa aiutarmi?
ho cercato dappertutto il sistema per importare dinamicamente classe metodi e altro da una dll esterna e ho trovato il sistema chiamato Reflection. Allora io agisco in questo modo
using System;
using System.Collections.Generic;
using System.Text;
namespace KeyCrypt
{
interface KeyCrypting
{
string fileconvert(string path);
double version();
string idcheck();
}
}
Ora vorrei implementare i metodi a mio piacimento e realizzo:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace KeyCrypt
{
class BlaBla : KeyCrypting
{
private double cryptversion = 1.0;
string fileconvert(string path)
{
return "fileconvert";
}
double version()
{
return cryptversion;
}
string idcheck()
{
return "ciaciao";
}
}
}
Tutto ciò nel mio progetto di libreria, compilo e ottengo la mia bella dll. Quindi vado nel sorgente dove mi serve e faccio:
Assembly a = Assembly.LoadFile(KryptingKeyPath);
foreach (Type tipo in a.GetTypes())
if (tipo.GetInterface("KeyCrypting") != null)
{
KeyCrypting skeycript = (KeyCrypting)Activator.CreateInstance(tipo);
String b= skeycript.ToString();
}
Compila e funziona anche questo (KryptingKeyPath è una stringa dove c'è il percorso corretto della mia dll precedentemente compilata), però arriva all'istruzione dove deve creare l'oggetto e mi da InvalidCastException dicendo che la classe Blabla non può essere castata a KeyCrypting quando invece la implementa e mi compila la dll :(
Qualcuno sa aiutarmi?