Char* wird immer in Bool umgewandelt



  • Hallo,

    ich arbeite an einem in LabWindows geschriebenen Programm. Diese Anwendung wurde auf Visual Studio 2010 konvertiert, sodass ich das es ohne Probleme compilieren kann. Nun möchte ich verschiedene Module von LabWindows-C in C++/CLI umbauen.

    Hierbei tritt folgender Fehler auf:

    Es existiert eine Struktur nach folgendem Aufbau

    typedef struct
    {
     //////////////LABEL TEXTS ///////////////////////////////
     char    *labProgramTitle; //Program-Title
     char    *labEdtTaskNumber;
     char    *labEdtRefTaskNumber;
     char    *labEdtMainTaskNumber;
    ...
    }STR_ST_TEXT; 
    
    STR_ST_TEXT str_ST_db_text_ger =
    {
     //////////////LABEL TEXTS ///////////////////////////////
     "Text1",
     "Text2",
     "Text3",
     "Text4",
     "Text5",
    ...
    }
    
    STR_ST_TEXT *strSTText = &str_ST_db_text_ger;
    

    Wenn ich nun versuche, auf den Text "strSTText ->labProgramTitle" zuzugreifen und diesen in eine String^ Variable speichern möchte, dann wirft der C++ Compiler folgenden Fehler:

    String^ myString = gcnew String(strSTText->labProgramTitle);
    

    fatal error C1001: Interner Compilerfehler.
    1> (Compilerdatei "f:\dd\vctools\compiler\utc\src\p2\main.c[0x5111E0DB:0x00000030]", Zeile 182)
    1> Vereinfachen oder ändern Sie das Programm im Umfeld der oben aufgeführten Positionen. Wählen
    1> Sie im Menü "Hilfe" von Visual C++ den Befehl "Technischer Support",
    1> oder öffnen Sie die Hilfedatei des technischen Supports, um weitere Informationen zu erhalten.

    Wenn ich aber die Konvertierungsfunktion von "Convert::ToString()" benutze, dann wandelt mir der Compiler den String immer in einen bool'schen Wert um.

    String^ myString = gcnew String("");
                myString = Convert::ToString(strSTText->labProgramTitle);
    

    warning C4800: 'char *': Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten möglich)

    Kann mir einer helfen diesen Fehler in den Griff zu bekommen?
    Leider weiß ich nicht, wo ich hier ansetzen kann!

    Vielen Dank für eure Hilfe.



  • Hi, folgender Code funktioniert bei mir.
    Einzige Änderungen:
    - Die Anzahl Elemente bei str_ST_db_text_ger der Definition von STR_ST_TEXT angepasst.
    - Fehlendes Semikolon bei der Definition von str_ST_db_text_ger hinzugefügt.

    #include "stdafx.h"
    
    typedef struct 
    { 
     //////////////LABEL TEXTS /////////////////////////////// 
     char    *labProgramTitle; //Program-Title 
     char    *labEdtTaskNumber; 
     char    *labEdtRefTaskNumber; 
     char    *labEdtMainTaskNumber; 
    }STR_ST_TEXT; 
    
    STR_ST_TEXT str_ST_db_text_ger = 
    { 
     //////////////LABEL TEXTS /////////////////////////////// 
     "Text1", 
     "Text2", 
     "Text3", 
     "Text4", 
    };
    
    STR_ST_TEXT *strSTText = &str_ST_db_text_ger; 
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
        String^ myString = gcnew String(strSTText->labProgramTitle);
    
        return 0;
    }
    

    $imon



  • Hallo theta,

    ich wollte hier nur einen kleinen Auszug aus der Struktur zeigen, deshalb habe ich auch die "..." genutzt. Im vorhandenen Code passt die Anzahl der Struktur "STR_ST_TEXT" mit der Sturktur "str_ST_db_text_ger" überein!

    Es muss irgendein anderer Fehler sein. Es ist sehr komisch, dass ich dem String-Konstuktor kein "char*" übergeben kann. Wenn ich das mache, dann schmeißt der Compiler wie erwähnt den folgenden Fehler:

    fatal error C1001: Interner Compilerfehler.
    1> (Compilerdatei "f:\dd\vctools\compiler\utc\src\p2\main.c[0x5111E0DB:0x00000030]", Zeile 182)
    1> Vereinfachen oder ändern Sie das Programm im Umfeld der oben aufgeführten Positionen. Wählen
    1> Sie im Menü "Hilfe" von Visual C++ den Befehl "Technischer Support",
    1> oder öffnen Sie die Hilfedatei des technischen Supports, um weitere Informationen zu erhalten.

    Ich habe auch schon probiert, die Optimierungseinstellungen des Projekts zu ändern, jedoch hat das bis jetzt noch nichts gebracht! Habt ihr da gleiche Probleme gehabt? An was kann das liegen, dass ich nicht mal dem Standard-Konstruktor ein char* übergeben kann?

    Gruß



  • Irgendwas bringt den Compiler aus dem Tritt.
    Probiere doch solange das Bsp zu erweitern bis es nicht mehr kompiliert, so findest Du heraus an was es liegt und kannst geziehlt nach Lösungen suchen.

    Simon


Log in to reply