GetTextMetrics und Unicode



  • Hallo zusammen,

    .....
    TEXTMETRIC textmetrics;
    GetTextMetrics(hdc, &textmetrics);
    ......
    

    // GetTextMetrics liefert 60, statt 57 Bytes für die
    // Struktur TEXTMETRIC zurück, dies führt zum Absturz bei DevStudio 2005 !!
    "Run-Time Check Failure #2 - Stack around the variable 'textmetrics' was corrupted".

    dieses Code sturtzt in VC6 nicht ab ?
    wie kann man dieses Problem lösen ?
    ich habe einen ganzen Tag versucht den Fehler zu beheben und im Netz gesucht aber bis jetzt erfolglos
    in meiner Anwendung ist Unicode eingestellt.


  • Mod

    Hast Du mit den Structrue Alignments gespielt? prgama pack oder ähnliches?

    Ist das nun ein UNICODE Projekt oder ein MBCS Projekt?



  • Hallo und danke für deine schnelle Antwort

    mein Projekt ist ein UNICODE Projekt.
    ich habe die ganze Projektmappe durchsucht und in anderen Modulen einige "#pragma pack" Anweisungen gefunden:

    #pragma pack(1)
    .....
    ......
    #pragma pack()
    

    oder

    #pragma pack(push, 8)
    ....
    ....
    #pragma pack(pop)
    

    Gruss
    Sibourg


  • Mod

    Wie sieht Deine stdafx.h aus? Afxwin.h wird zuerst included und ich hoffe in der stdafx.h finden sich keine pragma pack Anweisungen. /Zp wird auch nicht verwendet?



  • in der Projekt Eingenschaften steht unter:
    Ausrichten der Strukturmember: 1 Byte (/Zp1)

    in stdafx.h befinden sich keine pragma pack Anweisungen
    und in Afxwin.h befinden sich die folgende 3 pragma pack Anweisungen:

    #ifndef _AFX_NO_AFXCMN_SUPPORT
    #ifdef _AFX_PACKING
    #pragma pack(push, _AFX_PACKING)
    #endif
    #include <afxcomctl32.h>
    #ifdef _AFX_PACKING
    #pragma pack(pop)
    #endif
    #endif
    

    und

    #ifdef _AFX_PACKING
    #pragma pack(push, _AFX_PACKING)
    #endif
    

    und

    #ifdef _AFX_PACKING
    #pragma pack(pop)
    #endif
    


  • sibourg schrieb:

    Ausrichten der Strukturmember: 1 Byte (/Zp1)

    Dann wird das das Problem sein.


  • Mod

    Bingo!



  • Ich muss das hier hoch einmal aufgreifen:

    Ich habe das gleiche Problem, und in meinem Projekt (=UNICODE) muss die Ausrichten der Strukturmember auf 2 Byte (/Zp2) stehen, sonst bin ich datentechnisch mit einem anderen Programm nicht mehr kompatibel.
    Bekommt man das irgendwie mit #pragma pack([ push | pop ], identifier, n) hin? Irgendwie klappt das bei mir nicht.

    Danke für eure Mithilfe 😃



  • Hallo,
    ich habe das Problem einfach so gelöst.

    // GetTextMetrics liefert 60, statt 57 Bytes für die
    // Struktur TEXTMETRIC zurück, dies führt zum Absturz bei DevStudio 2005 !!
    BYTE buffer[100];
    for (BYTE i = 0; i<100; i++)
    buffer[i] = i;

    LPTEXTMETRIC lpMetrics = (LPTEXTMETRIC)&buffer;



  • Danke, so funktioniert es! 👍


  • Mod

    Das kann so nicht funktionieren. Die letzten Datenfelder sind damit in jedem Fall falsch gefüllt. Zudem wird das Problem mit jeder anderen Struktur aus der Win32 API wieder auftreten!


Anmelden zum Antworten