Fehler beim konvertieren vom int to String
-
Hallo ich habe da mal ein Problem, welches ich nicht gelöst bekomme. Programmiert wird mit C++ unter MS Visual Studio 2005.
Und zwar versuche ich eine Schnittstelle mit einem Robotersteuerung zu setzen, dazu will ich eine ganze Zahl zu ihm senden. der Programmcode sieht auch recht simpel aus:void CGidKDlg::COMSignalSenden(int Meldung)
{
CString sBuf;
sBuf.Format("%d", Meldung);
comport.Write(sBuf, strlen(sBuf));
}Die sache ist in einem anderen Programm funktioniert das so, nur hier kommt die Fehlermeldung:
error C2664: 'void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)': Konvertierung des Parameters 1 von 'const char [3]' in 'const wchar_t *' nicht möglich
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL<wchar_t>
1> ]
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
...\gidkdlg.cpp(662) : error C2664: 'strlen': Konvertierung des Parameters 1 von 'CString' in 'const char *' nicht möglich
1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werdenIch habe jetzt über zwei Tage investiert und keine Lösung gefunden. Ich hoffe jemand kann mir da helfen wo das Problem liegt.
Befor komische Kommentare kommen <string> ist natürlich eingefügt.
Bin über jeden Tip dankbar!
MFG DA
-
Dein Projekt scheint auf Unicode eingestellt zu sein.
Es gibt 2 Möglichkeiten.
1. Stell dein Projekt wieder zurück.
2. Benutze z.B. CT2A(...) um von Unicode oder nicht Unicode auf Ansi zu konvertieren.
Simon
Edit:
Ok die Problematik stimmt, jedoch tritt es an anderer Stelle auf...Mach mal das:
sBuf.Format(_T("%d"), Meldung);
-
hihi,
ja danke für die Antwort und der erste Fehler ist auch behoben nur bleibt der zweite Fehler noch mit der gleichen Fehlermeldung. Hoffe da kann mir noch jemand ein Tip geben. Ist deprimierend, wenn man wegen so was nicht weiter kommt...
-
Ein MFC CString ist auch kein C String, daher kannst du nicht
strlendarauf anwenden, erst recht nicht, wenn du mit Unicode oder ähnlichem kompilierst. Der MFC CString sollte allerdings eineGetLengthMethode haben.
Ob deincomport.writedamit richtig funktionieren wird, ist immer noch nicht gesichert. Kommt darauf an, was die Methode genau erwartet.Grüssli
-
Danke für die Antwort bin nicht so wirklich tief in der C++ Programmierung drin.
Vielleicht hier noch mal kurz bevor ich ein neues Thema öffne:
Nun habe ich das Problem das die Anwendung nicht startet, d.h. er hat keine Fehler mehr nur wird die .exe nicht mehr ausgeführt. Was kann da das Problem sein? Wobei er es ja wieder mal zwei Tage vorher ausgeführt hat ...
Danke schon mal für noch ein Tip.
-
DA schrieb:
Danke für die Antwort bin nicht so wirklich tief in der C++ Programmierung drin.
Wieso programmierst du dann bereits mit der MFC? Lern doch lieber zuerst reines Standard C++, bevor du dich in solche hässliche Bibliotheken wie die MFC vorwagst.
Zu deinem nächsten Problem:
Da musst du eine genauere Fehlerbeschreibung geben. Was heisst...- ... "die Anwendung nicht startet"?
- ... "d.h. er hat keien Fehler mehr"? Wer er?
- ... "nur wird die *.exe nicht mehr ausgeführt"? Dann musst du sie halt starten oder wie soll man das verstehen?
Und übrigens "zwei Tage vorher" -> zwei Tage Dinge verändert. Schlussfolgerungen: In den Veränderungen liegt mindestens ein Problem.

Grüssli
-
Dravere schrieb:
Wieso programmierst du dann bereits mit der MFC? Lern doch lieber zuerst reines Standard C++, bevor du dich in solche hässliche Bibliotheken wie die MFC vorwagst.
Na Leider bleibt mir nichts anderes übrig da es im Rahmen eines Projektes im Studium ist... Außerdem so schlimm ist es nun auch nicht, nur es gibt ja immer was zu lernen

Dravere schrieb:
Zu deinem nächsten Problem:
Da musst du eine genauere Fehlerbeschreibung geben. Was heisst...- ... "die Anwendung nicht startet"?
- ... "d.h. er hat keien Fehler mehr"? Wer er?
- ... "nur wird die *.exe nicht mehr ausgeführt"? Dann musst du sie halt starten oder wie soll man das verstehen?
Grüssli
zu 1) Ich habe ja über den MFC eine Oberfläche erstellt die sonst nach dem Kompelieren (strg F5) startet. (Diese Anwendung läuft auf einem Rechner und soll über den Comport mit der Robotersteurung kommunizieren)
zu 2) beim Kompelieren sagt er mir 0 Fehler.
zu 3) die startet er doch allein wenn er kompeliert hat oder nicht? außerdem wird die ja auch neu erstellt werden und startet dann selbstständig. hat er zumindest vorher gemacht.
Dravere schrieb:
Und übrigens "zwei Tage vorher" -> zwei Tage Dinge verändert. Schlussfolgerungen: In den Veränderungen liegt mindestens ein Problem.
Ich habe hier zwei Arbeitsplätze und ich habe nur ean einem herumgedoktort und über nehm das dann auf den rechner der mit der Robotersteuerung zusammen hängt

-
Ok ich habe, jetzt einfach mal das Projekt von Visual Studio bereinigen lassen, danach neu Kompeliert und nun funktioniert es, wobei dieser weg mich leider nicht befriedigt, denn ich würde schon gern wissne wo das problem lag...