Statische Bibliothek Visual Studio

Gast #7126660
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?
Gast #7126666
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.
#7126668
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
Gast #7126677
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
Gast #7126693
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.
Gast #7126696
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren