Wrapper von C++ Klassen......Struct Member Alignment Problem



  • hi Leute !

    Ich schreibe einen Wrapper für meine C++ Klassen!
    Ich benötige aber "Struct Member Alignment = 1 Byte"
    .....Wenn ich das jedoch einstellen (VC++ ClassLibrary) meckert der CompileR!

    Was kann ich tun? Ich brauch diese Einstellung aber?

    herzlichen dank



  • Was meckert er denn ?



  • 1>MSVCMRTD.lib(mstartup.obj) : error LNK2022: metadata operation failed (8013118D) : Duplizierte Typen (tagTEXTMETRICA) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x02000039).
    1>MSVCMRTD.lib(managdeh.obj) : error LNK2022: metadata operation failed (8013118D) : Duplizierte Typen (tagTEXTMETRICA) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x02000029).
    1>MSVCMRTD.lib(msilexit.obj) : error LNK2022: metadata operation failed (8013118D) : Duplizierte Typen (tagTEXTMETRICA) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x0200002f).
    1>MSVCMRTD.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (8013118D) : Duplizierte Typen (tagTEXTMETRICA) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x02000029).
    1>LINK : fatal error LNK1255: link failed because of metadata errors
    

    Herzlichen Dank!



  • Bereinige mal das Projekt und erstelle es komplett neu. Wenn das nicht hilft, such mal hier im Forum, hierzu gab es noch einen zweiten Lösungsansatz den ich aus dem Stehgreif nicht zusammen bekomme.



  • Hi! Der Fehler kommt zustande, da

    #include <windwos.h>
    

    verwendet wird !

    Wie kann ich das nun machen, denn ich brauche die windows.h!

    Jeman eine Idee?



  • verzichte auf das 1-byte alignment bei allen windows structs.
    wieso brauchst du das überhaupt?



  • Undertaker schrieb:

    verzichte auf das 1-byte alignment bei allen windows structs.
    wieso brauchst du das überhaupt?

    Das Programm dient zur Kommunikation mit einem µC! Beide verwenden das selbe *.h File mit einer unmenge an strcts ;)!

    ich Benötige in der zu wrappende Klasse einfach das windows.h ! Geht nicht anders 😞

    Bekomm keine ordentliche Lösung hin!



  • Wie kann ich zB nur für die windows.h das alignment unterbinden?



  • MartinXX schrieb:

    Undertaker schrieb:

    verzichte auf das 1-byte alignment bei allen windows structs.
    wieso brauchst du das überhaupt?

    Das Programm dient zur Kommunikation mit einem µC! Beide verwenden das selbe *.h File mit einer unmenge an strcts ;)!

    lass das sein. compiler haben zu viel handlungsspielraum bei structs d.h. dein 1-byte alignment ist erst der anfang einer ganzen reihe von problemen.
    mach' die kommunikation besser über ein protokoll, das genau definiert, wie die daten aussehen sollen.
    🙂



  • Ich hatte eine Ähnliche Fehlermeldung. Ich habe stundenlang meinen Code von oben bis unten nach Fehlern durchsucht. Dann durch den Tipp mit dem neuen Projekt lief es.
    Ich habe eine neues Projekt erstellt und alle Dateien wieder eingebunden. Ich benutze Visual Studio 2008...

    Schöne Grüße



  • Hallo,

    schreib doch einfach vor das #include "Windows.h"

    #pragma pack(push)
    

    Das setzt das alignment auf den default wert.



  • templäd schrieb:

    schreib doch einfach vor das #include "Windows.h"

    #pragma pack(push)
    

    oder noch einfacher

    #pragma pack(1)
    // jede Menge structs
    #pragma pack()
    

    und das default alignment lassen wie's ist.

    MartinXX schrieb:

    Wie kann ich zB nur für die windows.h das alignment unterbinden?

    Du kannst die Speicherausrichtung nicht "unterbinden". An irgendwas muss es doch schließlich ausgerichtet sein und wenn's eben 1 ist.


Log in to reply