Richtige Deklaration eines Strucks bzw. dessen auslesen und beschreiben C-Code



  • Hallo zusammen,
    ich bin dabei mein altes C-Prog in eine 32 BIT Version zu verwandeln.

    In der zugehörigen Header Datei steht die Daten Struktur nicht nur mit
    Namen wie eh und je sondern auch mit drei Zeigern.

    Ich habe keine Ahnung wie ich jetzt meine Variable mit diesem Typ deklariere und auch nicht wie ich da hinein schreiben wzw. drauß lesen kann.

    Hier mal die alte und wie ich mit der klar gekommen bin-

    //deklaration in der header datei >>name.h<<

    typedef struct datenstrk_{
    LPSTR lpData;
    DWORD dwBuffer;
    DWORD dwBytes;
    DWORD dwPTI_;
    DWORD dwFlags;
    } MERKER

    Dann die Deklaration meiner Variablen->
    MERKER irgendwas_;

    Dann konnte ich so daruf zugreifen->
    irgendwas_.lpData = 900;

    Jetzt ist dieses Struckt so deklariert->
    //deklaration in der header datei >>name.h<<

    typedef struct datenstrk_{
    LPSTR lpData;
    DWORD dwBuffer;
    DWORD dwBytes;
    DWORD dwPTI_;
    DWORD dwFlags;
    } MERKER, *PMERKER, NEAR *NPMERKER, FAR *LPMERKER;

    1.Frage wie wird jetzt eine Variable des Typs datenstrk_
    deklariert ?
    z.B. so -> LPMERKER bezeichner; ?
    oder LPMERKER bezeichner;
    oder LPMERKER *bezeichner; NULL AHNUNG !!!

    Habe das probiert kommt immer die Fehlermeldung mit dem Punkt.

    2.Frage wie wird in die struktur variable geschrieben ?

    Dies gibt einen Fehler ->bezeichner.dwBuffer = 700;

    dies auch ->(*bezeichner).dwBuffer = 700;

    Structure required on left side of . or .* in funktion bla...

    Habe mir schon´n Wolf gegooglet 😞

    wäre dankbar wenn es hier jemand wüßte

    lg vrzwflt_ 🙄


  • Mod

    Das sind bloß vier typedefs in einem. struct datenstrk_ ist der Originalname. MERKER ist ein alternativer Name für dieses struct. PMERKER ist ein alternativer Name für einen Zeiger auf dieses struct. NPMERKER und LPMERKER sind ebenfalls alternative Namen für Zeiger auf dieses struct (near und far Zeiger), die du in einem 32-Bit Programm wohl kaum mehr brauchen wirst.

    Noch was wichtiges: Programmieren, ganz besonders in einer anfängerunfreundlichen Sprache wie C, ist nicht wildes herumprobieren. Du musst von jedem Zeichen in deinem Code genau wissen, wo und warum du es setzt. Also bitte nicht so lange zufällig Sternchen und Casts im Code verteilen, bis es compiliert. In C ist so ziemlich jeder Nonsens irgendwie übersetzbar. Gerade deswegen ist es ja so anfängerunfreundlich, da die fehlerhaften Programme problemlos übersetzen, wenn man bloß genug herum probiert.



  • vrzwflt_ schrieb:

    Habe mir schon´n Wolf gegooglet 😞

    Hoffentlich nicht, Pfuscher JW ist nicht bekannt für seinen kompetenten Sachverstand.

    Da es ja wohl ein altes Windowsprogramm ist, solltest du unbedingt Unicode ausschalten (wegen LPSTR und so Zeugs), also

    #undef UNICODE
    #undef _UNICODE
    

    zu Beginn. (die alten MSC hatten noch kein Unicode als Default, die neuen schon)

    "->" ist für den struct-Elementzugriff über einen Zeiger auf ein struct,
    "." ist für den struct-Elementzugriff über eine struct-Variable.

    MERKER merker;
    PMERKER pmerker;
    merker.dwBuffer = 700;
    pmerker->dwBuffer = 700; /* verkürzte Schreibweise für (*pmerker).dwBuffer = 700 */
    


  • Hi Wutz,
    Dann konnte ja eigendlich meine Variablen Deklaration so bleiben
    Wie sie ist.

    MERKER bezeichner;
    Und dann der Zugriff

    Wie ich es immer gemacht habe mit
    Bezeichner.lpData = 700;

    Dies mokiert der BCC32 aber.
    Normal musste ja der funktionierende
    code nur compiliert werden.

    Aber das klappt nicht wegen solcher Fehlermeldungen.
    Was hat es mit dem Unicode auf sich ? 🙄

    ZB. Am Anfang von Main.c einmal setzen und gut oder
    In jeder Header Datei ?



  • Habe mal den Unicode getestet, ging nicht.
    Dann habe ich mal nach gesehen in den header Dateien,
    Da ist dieser Umstand bereits berücksichtigt alle relevanten
    Deklarationen werden bevor sie installiert werden auf den
    Schalter Unicode getestet
    #ifdev UNICODE
    Blau
    #Else
    Grün
    #endif
    Der Fehler kommt so als ware die Deklaration gar nicht da.
    Non portable pointer in bla ... 😮

    Jetzt habe ich die main.c Datei einfach in main.cpp
    umbenannt nun sind die Fehler weg dafür findet er jetzt
    andere Fehler? das Prog läuft doch seit Jahren einwandfrei ?!? 😡


  • Mod

    Minimalbeispiel erstellen. Siehe Link in meiner Signatur für eine Anleitung.


Log in to reply