Statische Bibliothek Visual Studio

Gast #7126660
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
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
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
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
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
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.
Gast #7126718
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?
#7126737
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.