Forum: PC-Programmierung C++ Problemchen


von peterguy (Gast)


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
1
extern "c" __declspec(dllexport) int GetNumberOfDevices()
2
{
3
   // Hier soll jetzt auf das Objekt zugegriffen werden, also z.B.
4
   return MyObject.GetNumUsbDevices();
5
}

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?

von Peter (Gast)


Lesenswert?

mach das object static dann sollte es nur einmal erzeugt werden.

von peterguy (Gast)


Lesenswert?

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

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:
1
static MyClass MyObject;
2
3
extern "c" __declspec(dllexport) int GetNumberOfDevices()
4
{   
5
   // Hier soll jetzt auf das Objekt zugegriffen werden, also z.B.
6
   return MyObject.GetNumUsbDevices();
7
}

von Bernhard M. (boregard)


Lesenswert?

Google mal nach "singleton", das sollte das sein was Du brauchst...

von peterguy (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.