mikrocontroller.net

Forum: PC-Programmierung C++ Problemchen


Autor: peterguy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe ein kleines (Verständnis-)Problem bei der objektorientierten 
Programmierung in VC++.

Und zwar möchte ich eine DLL erstellen, die nach Aussen Zugriff auf ein 
internes Objekt ermöglicht. Die zu exportierenden Funktionen sind als 
extern "C" deklariert.

Jetzt habe ich z.B. eine Funktion
extern "c" __declspec(dllexport) int GetNumberOfDevices()
{
   // Hier soll jetzt auf das Objekt zugegriffen werden, also z.B.
   return MyObject.GetNumUsbDevices();
}

Nun funktioniert das ganze leider nicht, da ich ja nur eine Klasse 
programmiert habe, diese jedoch ncoh nicht instanziert wurde.
Wenn ich die Instanzierung in der GetNumberOfDevices() mache, dann ist 
das Objekt nach verlassen der Funktion ja wieder weg.

Wie kriege ich es hin, daß das Objekt erhalten bleibt (also quasi 
statisch und global ist) und auch die anderen exportierten Funktionen 
darauf zugreifen können?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach das object static dann sollte es nur einmal erzeugt werden.

Autor: peterguy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie genau meinst du das mit dem static machen?
So vielleicht:
extern "c" __declspec(dllexport) int GetNumberOfDevices()
{
   static MyClass MyObject;
   // Hier soll jetzt auf das Objekt zugegriffen werden, also z.B.
   return MyObject.GetNumUsbDevices();
}

Ok, dann bleiben die Daten schonmal innerhalb der Funktion erhalten.
Aber andere Funktionen können immer noch nicht auf das Objekt zugreifen, 
oder?

Wie bekomme ich das Objekt jetzt noch global?
Das hier scheint nicht zu fuktionieren:
static MyClass MyObject;

extern "c" __declspec(dllexport) int GetNumberOfDevices()
{   
   // Hier soll jetzt auf das Objekt zugegriffen werden, also z.B.
   return MyObject.GetNumUsbDevices();
}


Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Google mal nach "singleton", das sollte das sein was Du brauchst...

Autor: peterguy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Hilfe!
Habe das mit dem Singleton zwar nicht komplett verstanden, aber es 
scheint jetzt zu funktionieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.