Forum: PC-Programmierung Statische Bibliothek Visual Studio


von Zorro (Gast)


Lesenswert?

Hallo,

meine aktuelle Windows Anwendung besteht aus einer Test Applikation und 
einer Statische Bibliothek (C++). Ich versuche aber alles soweit in C 
umzusetzen.
In der Bibliothek habe ich eine Struktur mit typedef struct angelegt. 
Nun möchte ich global diese Struktur erzeugen und zugreifen.Was müsste 
ich tun damit ich auch in der Bibliothek in einer Funktion auf diese 
Struktur zugreifen kann?

von DerEgon (Gast)


Lesenswert?

Zorro schrieb:
> In der Bibliothek habe ich eine Struktur mit typedef struct angelegt.

Damit hast Du nur einen Typ einer Struktur deklariert, angelegt (bzw. 
instanziiert) hast Du sie nicht.
1
typedef struct
2
{
3
  int x;
4
  int y;
5
} blafusel;

erzeugt nur den Typen, aber keine Variable dieses Typs.

Du musst schon (mindestens) eine Instanz dieses Typs anlegen:
1
blafusel meineVariable;

Und wenn Du das in Deiner Library machst, musst Du sowohl den Typen als 
auch eine extern -Deklaration der Variablen in eine Headerdatei 
packen, damit Dein Programm das auch sehen und verstehen kann:
1
// irgendwas.h
2
3
typedef struct
4
{
5
  int x;
6
  int y;
7
} blafusel;
8
9
extern blafusel meineVariable;


Daß globale Variablen (und das hier ist eine) selten wirklich nötig und 
sinnvoll sind, sollte Dir klar sein.

von Oliver S. (oliverso)


Lesenswert?

Eine Struktur legst du nicht in einer statischen Bibliothek an, sondern 
in deren Quelltext.

Jede lib kommt mit einem headerfile, in dem alles steht, was man 
außerhalb der lib zu ihrer Benutzung braucht. Das sollte auch der 
Lösungsansatz für dein Problem sein.

Das zweite, was du dir anschauen solltest, sind Funktionsparameter und 
Pointer oder in C++  Referenzen. Die brauchst du, um aus der lib auf 
deine global angelegte Struktur zugreifen zu können.

Oliver

von Zorro (Gast)


Lesenswert?

Ok Danke dir. Ich habe nun in der Header von der Lib das mit extern 
durchgeführt.

In der Hauptanwendung lege ich eine Instanz mit Test::blafusel 
meineVariable.
Ich kann auch in der Hauptanwendung auf die Struktur zugreifen. Nur der 
Zugriff in der C Datei in der Lib funktioniert nicht.

Fehlermeldung:
1
Schweregrad  Code  Beschreibung  Projekt  Datei  Zeile  Unterdrückungszustand
2
Fehler  LNK2001  Nicht aufgelöstes externes Symbol
3
1 nicht aufgelöste Externe

von DerEgon (Gast)


Lesenswert?

Zorro schrieb:
> n der Hauptanwendung lege ich eine Instanz mit Test::blafusel
> meineVariable.
> Ich kann auch in der Hauptanwendung auf die Struktur zugreifen. Nur der
> Zugriff in der C Datei in der Lib funktioniert nicht.

Du willst C++ und C mischen. Das macht die Angelegenheit gleich deutlich 
komplizierter.

von Zorro (Gast)


Lesenswert?

Ja eigentlich möchte ich es nicht mischen aber ich weis nicht wie ich 
das auf auch ohne C++ realisieren kann. Da gibt es ja noch viele 
EInstellungen in den Optionen da möchte ich nicht einfach was ändern.

von Zorro (Gast)


Lesenswert?

Der Zugriff auf die Struktur innerhalb der Lib funktioniert nicht. 
Außerhalb kann ich zugreifen.

von Zorro (Gast)


Lesenswert?

Oder ich übergebe quasi die Adresse der Lib-Funktion wo ich auf die 
Struktur zugreifen kann.

von Zorro (Gast)


Lesenswert?

Die Adresse der Instanz ist nicht gleich der Adresse in der Lib 
Funktion. Wie kann ich die Lib dazu bringen auch auf die Adresse von der 
Instanz in der Hauptanwendung zuzugreifen?

von Oliver S. (oliverso)


Lesenswert?

Oliver S. schrieb:
> Das zweite, was du dir anschauen solltest, sind Funktionsparameter und
> Pointer oder in C++  Referenzen. Die brauchst du, um aus der lib auf
> deine global angelegte Struktur zugreifen zu können.

Du musst der Funktion in der lib halt irgendwie einen Pointer oder eine 
Referenz auf die globale Struct-Instanz übergeben.

Oliver

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.