Char * - Problem



  • Zurzeit programmiere ich ein eigenes verschlüsselungsprogramm !

    dazu baue ich eine GUI in c++ und der verschlüsselungscode liegt in c vor.
    Um diesen Code einzubinden, habe ich mir eine code.cpp und eine code.h erstellt! die code.h enthält nur die prototypen.

    MEIN PROBLEM:
    der verschlüsselte wert ist ein wchar_t* , diesen möchte ich zurückgeben. Doch der Compiler sagt mir folgendes:

    c:\users\user\documents\visual studio 2010\projects\bex_conv\bex_conv\Form1.h(248): warning C4800: 'wchar_t *': Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten möglich)

    global sind folgende variablen definiert :

    wchar_t *bex, *p_bex;
    wchar_t *kette = L"ABCDEFGHIJK";
    //char *kette = "KI8VD4G0A";
    int 	BASIS = 11;
    

    sobald ich den wert von bex zurückgeben will, wird IMMER ein TRUE ausgegeben -.-
    habt ihr ne ahnung wo der Fehler liegt, vllt an der kompatibilität zwischen c und c++ ???



  • der Code sah so aus, bevor ich schon einige stunden daran getestet habe :
    ( am unteren Teil habe ich nur ein wchar_t* aus char* gemacht )

    char *bex, *p_bex;
    char *kette = "ABCDEFGHIJK";
    //char *kette = "KI8VD4G0A";
    int 	BASIS;
    
    char
    ToSign( int n ){
       return (kette[n]);
    }
    
    char
    ToBex( int d ){
    	int 	r = d % BASIS;
    	int lsize = 0;
    
    	++lsize;
    	if( d-r == 0 ){
               [Code]
    	}else{
               [Code]
    	}
    	return;
    }
    

    wenn ein programm in der Konsole aufgerufen wird, mit demselben Code wie oben,
    kommt beim aufruf mit

    printf("Zahl als Bex: %s\n", bex );
    

    die gewünschte verschlüsselung heraus -.-



  • so, ich bin schon etwas weiter gekommen:

    /* Code in code.h */
    char *bex, *p_bex;
    char *kette = "ABCDEFGHIJK";
    //char *kette = "KI8VD4G0A";
    int 	BASIS;
    
    char
    ToSign( int n ){
       return (kette[n]);
    }
    
    char* getBex(){
    	return bex;		
    }
    
    void
    ToBex( int d ){
    	int 	r = d % BASIS;
    	int lsize = 0;
    
    	++lsize;
    	if( d-r == 0 ){
                [Code]
    	}else{
                [Code]
    	}
    	return;
    }
    
    /* Aufruf in Form1.h */
    /* GetVolumeSerial gibt die Festplatten-Seriennummer als unsigned long int
     * zurück 
    */
    
         ToBex((int)GetVolumeSerial());
         String^ test = Convert::ToString(getBex());
    

    Der Fehler von vorhin existiert nicht mehr, allerdings sind 3 neue aufgetaucht :
    -------------------
    bex_conv.obj : error LNK2028: Nicht aufgelöstes Token (0A00000D) ""unsigned long __clrcall GetVolumeSerial(void)" (?GetVolumeSerial@@$$FYMKXZ)", auf das in Funktion ""private: void __clrcall bex_conv::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@bex_conv@@$$FAAAMXPAAMXPAAVObject@System@@PAAVEventArgs@4@@Z)" verwiesen wird. \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- 1>bex\_conv.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""unsigned long \_\_clrcall GetVolumeSerial(void)" (?GetVolumeSerial@@FYMKXZ)"inFunktion""private:void__clrcallbex_conv::Form1::button1_Click(classSystem::Object,classSystem::EventArgs)"(?button1_Click@Form1@bexconv@@FYMKXZ)" in Funktion ""private: void \_\_clrcall bex\_conv::Form1::button1\_Click(class System::Object ^,class System::EventArgs ^)" (?button1\_Click@Form1@bex_conv@@FAFAAAMXPAAVObject@System@@PAAVObject@System@@PAAVEventArgs@4@@Z)".
    ------------------
    1>C:\Users\User\documents\visual studio 2010\Projects\bex_conv\Debug\bex_conv.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
    ------------------



  • bei den unaufgelösten tokens , hab ich die Funktion GetVolumeSerial() vergessen zu implementrieren. Schnell implementiert. Doch jetzt habe ich wieder das selbe problem, char * wird auf booleschen wert gesetzt...

    W A R U M ? ? ?



  • auf welche Zeile des Codes dort oben gezieht sich denn die Fehlermeldung?



  • das ist bei der getBex()-Funktion in der nur steht :

    return bex;

    Da steht die fehlermeldung !


Anmelden zum Antworten