Hallo, habe folgendes Problem:
In einem Assembly "MyAssembly.dll" sind folgende Klassen definiert:
namespace Test {
public interface ITestKlasse {
int CallingCount { get; }
}
public class TestKlasse : ITestKlasse {
public int m_CallingCount;
public TestKlasse() {
m_CallingCount = 5;
}
public int CallingCount {
get {
return m_CallingCount;
}
}
}
Wenn ich nun in einer anderen Assembly folgenden Code Ausführe kommt es zu einer InvalidCastException, wieso?
using Test;
Assembly aAss = Assembly.LoadFrom(@"MyAssembly.dll");
object aObject = aAss.CreateInstance(typeof(TestKlasse).FullName);
if(aObject != null)
ITestKlasse aTJ = (ITestKlasse)bObject; --> hier kommt es zu der InvalidCastException
Original von SlEasy
//...
object aObject = aAss.CreateInstance(typeof(TestKlasse).FullName);
...
ITestKlasse aTJ = (ITestKlasse)bObject;
In der ersten Zeile steht aObject, in der zweiten aber bObject. konfus
MfG VizOne
Dann sollte es klappen. Lädst du eventuell eine alte Version der Assembly?
MfG VizOne
Nein, ich habe zwischenzeitlich die Definition des Interace in eine andere Assembly ausgelagert und statisch zur Anwendung gelinkt. jetzt funktioniert der gleiche Code. Hm, keine Ahnung, warum es nicht funktioniert, wenn TestKlasse und ITestKlasse in der selben Assembly liegen. Vielleicht führt eine statische und gleichzeitig dynamische Referenzierung des Assemblies zu diesem Problem.
Genau
Das klappt nur, wenn
a)dein Hauptprogramm assembly1 ist(hat Referenz auf b)
b)dein Interface Assembly 2 ist
c)dein dynamsiches dingens Assembly 3 ist(auch mit Referenz auf Assembly2)
--
mfg
Franknstein
Besuchen sie das VisualC++ - Forum