Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Objekt in mehreren Subklassen verwenden
Viper2000
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

Objekt in mehreren Subklassen verwenden

beantworten | zitieren | melden

Guten Morgen...

ich muss nochmal eine Frage stellen:

Habe eine Basisklasse und mehrere davon abgeleitete Subklassen.
Alle Klassen dienen der Kommunikation mit einem USB Gerät über eine DLL die als Referenz eingebunden ist.

In der Basisklasse habe ich eine Variable dieser DLL erstellt und die Kommunikations-Methoden implementiert die von allen Subklassen mehrfach benötigt werden. Wenn ich nun allerdings aus einer Subklasse auf eine geerbte Methode der Basisklasse zugreifen will, bekomme ich folgenden Fehler:

Message "Die Quellklasse des verknüpften Objekts hat sich geändert. (Ausnahme von HRESULT: 0x80040008 (OLE_E_CLASSDIFF))" string

Ich verstehe nur nicht ganz warum? Die Variable der DLL müsste doch auch an die Subklassen vererbt werden. Aber bei jedem Zugriff auf eine dieser Funktionen schmier es mit obiger Fehlermeldung ab...

Hoffe einer kann helfen.

Gruß,
Viper
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Es scheint so, als ob die Klasseninstanz (der DLL) schon wieder gelöscht wurde (disposed).

Zeig doch mal etwas Source-Code...
private Nachricht | Beiträge des Benutzers
Viper2000
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

Ok, zuerst die Basisklasse mit einer Beispielmethode (Den Namen der DLL habe ich mal auf XYZDll geändert und die Klasseninstanz ist: "Automation".


abstract class Test
    {
        protected XYZDll Automation;
        protected bool connected;
        protected Config config;

        public Test()
        {
            Automation = new XYZDll();
            connected = false;
        }

        public abstract void Start();

        protected void Connect()
        {
             Automation.Connect(true);
        }
    }

Dann eine ageleitete Klasse:


class RomTest : Test
    {        
        public RomTest(Config iConfig)
        {
            this.config = iConfig;            
        }

        public override void Start()
        {            
            Automation.PerformRomTest();
        }

Wenn ich un eine Instanz der Klasse RomTest erstelle und die Methode Start() anstoßen will dann crasht das Progamm.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Viper2000 am .
private Nachricht | Beiträge des Benutzers
Viper2000
myCSharp.de - Member



Dabei seit:
Beiträge: 63

Themenstarter:

beantworten | zitieren | melden

hat noch jemand ne Idee?
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Evtl. hilft dir hierbei die GC.KeepAlive-Methode:


public Test()
{
     Automation = new XYZDll();
     GC.KeepAlive(Automation);

     connected = false;
}
private Nachricht | Beiträge des Benutzers
Peter Bucher
myCSharp.de - Experte

Avatar #jVxXe7MDBPAimxdX3em3.jpg


Dabei seit:
Beiträge: 5.940
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Hallo Viper2000

Der Fehler tritt auch auf, wenn du einfach mal ein Testprogramm schreibst ohne irgendwelche Klassen, oder?
Wenn ja, würde das die Frage vereinfachen, denn an der Vererbung liegt das bestimmt nicht ;-)

Schau mal hier:
- http://support.microsoft.com/kb/186063/en-us

Hast du mehr Infos zu der DLL?


Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

- https://peterbucher.ch/ - Meine persönliche Seite
- https://fpvspots.net/ - Spots für FPV Dronenflüge
private Nachricht | Beiträge des Benutzers