Laden...

InvalidCastException bei Instanziierung einer Klasse eines Assemblies

Erstellt von SlEasy vor 19 Jahren Letzter Beitrag vor 19 Jahren 1.227 Views
S
SlEasy Themenstarter:in
81 Beiträge seit 2004
vor 19 Jahren
InvalidCastException bei Instanziierung einer Klasse eines Assemblies

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

1.373 Beiträge seit 2004
vor 19 Jahren

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

S
SlEasy Themenstarter:in
81 Beiträge seit 2004
vor 19 Jahren

Sorry, da soll auch aObject stehen

1.373 Beiträge seit 2004
vor 19 Jahren

Dann sollte es klappen. Lädst du eventuell eine alte Version der Assembly?

MfG VizOne

S
SlEasy Themenstarter:in
81 Beiträge seit 2004
vor 19 Jahren

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.

F
529 Beiträge seit 2003
vor 19 Jahren

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