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?
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.
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
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 |
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.
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.
Der Zugriff auf die Struktur innerhalb der Lib funktioniert nicht. Außerhalb kann ich zugreifen.
Oder ich übergebe quasi die Adresse der Lib-Funktion wo ich auf die Struktur zugreifen kann.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.