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 mitprintf("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@@$$FAAAVObject@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@@AAMXPAAVEventArgs@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 !