|
You last visited: Today at 14:08
Advertisement
[C++] Frage zur Konvertierung von Strings
Discussion on [C++] Frage zur Konvertierung von Strings within the C/C++ forum part of the Coders Den category.
09/13/2009, 20:38
|
#1
|
elite*gold: 99
Join Date: Oct 2008
Posts: 2,708
Received Thanks: 1,726
|
[C++] Frage zur Konvertierung von Strings
Hey,
ich will in C++ ein GUI mit einer Editbox erstellen. (Habe das GUI mit MFC erstellt.) Wenn man nun auf einen Button klickt, soll der String der Editbox ausgelesen werden und in einer .ini Datei abgespeichert werden.
Das Problem: Wenn ich die Editbox auslese, benöige ich einen CString. WritePrivateProfileString() akzeptiert aber nur LPCSTR. Ich finde einfach keine Lösung, um das umzuwandeln.
Code:
PHP Code:
void CVokabeltrainerDlg::OnBnClickedButton1() { CEdit* pEdit = (CEdit*) GetDlgItem( IDC_EDIT1 ); CString Text = ""; pEdit->GetWindowText( Text ); WritePrivateProfileStringA("test", "1", Text, "c:\\test.ini"); }
Error:
error C2664: 'WritePrivateProfileStringA': Konvertierung des Parameters 3 von 'CString' in 'LPCSTR' nicht möglich
1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
Ich habe nach dem Problem schon lange gegoogelt, aber alle "Lösungen" die es dort gab, funktionierten nicht.
Wenn ich hier schon einen Thread zu den Strings erstelle, will ich gleich noch ein paar andere Frage loswerden:
Warum gibt es denn so viele verschiedene Typen von Strings, und wo liegen denn ihre Unterschiede?
Was ist genau der Unterschied zwischen ANSII und Unicode, und warum braucht man denn verschieden Zeichensätze?
Ich hoffe, ihr konntet meine Fragen einigermaßen verstehen und wisst vielleicht sogar ne Antwort darauf.
mfg
|
|
|
09/13/2009, 21:16
|
#2
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
|
könntest ja mal probieren ->
PHP Code:
WritePrivateProfileStringA("test", "1", (LPCSTR)Text, "c:\\test.ini");
|
|
|
09/13/2009, 21:21
|
#3
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Quote:
Originally Posted by Frezee
Hey,
ich will in C++ ein GUI mit einer Editbox erstellen. (Habe das GUI mit MFC erstellt.) Wenn man nun auf einen Button klickt, soll der String der Editbox ausgelesen werden und in einer .ini Datei abgespeichert werden.
Das Problem: Wenn ich die Editbox auslese, benöige ich einen CString. WritePrivateProfileString() akzeptiert aber nur LPCSTR. Ich finde einfach keine Lösung, um das umzuwandeln.
Code:
PHP Code:
void CVokabeltrainerDlg::OnBnClickedButton1()
{
CEdit* pEdit = (CEdit*) GetDlgItem( IDC_EDIT1 );
CString Text = "";
pEdit->GetWindowText( Text );
WritePrivateProfileStringA("test", "1", Text, "c:\\test.ini");
}
Error:
error C2664: 'WritePrivateProfileStringA': Konvertierung des Parameters 3 von 'CString' in 'LPCSTR' nicht möglich
1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
Ich habe nach dem Problem schon lange gegoogelt, aber alle "Lösungen" die es dort gab, funktionierten nicht.
Wenn ich hier schon einen Thread zu den Strings erstelle, will ich gleich noch ein paar andere Frage loswerden:
Warum gibt es denn so viele verschiedene Typen von Strings, und wo liegen denn ihre Unterschiede?
Was ist genau der Unterschied zwischen ANSII und Unicode, und warum braucht man denn verschieden Zeichensätze?
Ich hoffe, ihr konntet meine Fragen einigermaßen verstehen und wisst vielleicht sogar ne Antwort darauf.
mfg
|
Versuch mal
PHP Code:
WritePrivateProfileStringA("test", "1", (LPCSTR)Text, "c:\\test.ini");
Oder:
PHP Code:
void CVokabeltrainerDlg::OnBnClickedButton1()
{
CEdit* pEdit = (CEdit*) GetDlgItem( IDC_EDIT1 );
CString Text = "";
pEdit->GetWindowText( Text );
LPCSTR buf = Text.GetBuffer();
WritePrivateProfileStringA("test", "1", buf, "c:\\test.ini");
Text.ReleaseBuffer();
}
Falls es nicht geht, werde ich mal bei meinen Projekten schauen. Hatte das glaub ich auch mal.
|
|
|
09/13/2009, 21:27
|
#4
|
elite*gold: 99
Join Date: Oct 2008
Posts: 2,708
Received Thanks: 1,726
|
Quote:
Originally Posted by bloodx
könntest ja mal probieren ->
PHP Code:
WritePrivateProfileStringA("test", "1", (LPCSTR)Text, "c:\\test.ini");
|
Quote:
Originally Posted by Adroxxx
Versuch mal
PHP Code:
WritePrivateProfileStringA("test", "1", (LPCSTR)Text, "c:\\test.ini");
Oder:
PHP Code:
void CVokabeltrainerDlg::OnBnClickedButton1() { CEdit* pEdit = (CEdit*) GetDlgItem( IDC_EDIT1 ); CString Text = ""; pEdit->GetWindowText( Text ); LPCSTR buf = Text.GetBuffer();
WritePrivateProfileStringA("test", "1", buf, "c:\\test.ini"); Text.ReleaseBuffer(); }
Falls es nicht geht, werde ich mal bei meinen Projekten schauen. Hatte das glaub ich auch mal.
|
Thx an beide, hab ich alles schon versucht.
Bei der ersten Lösung kommt dieser Error:
error C2440: 'Typumwandlung': 'CString' kann nicht in 'LPCSTR' konvertiert werden
1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
Bei der zweiten:
error C2440: 'Initialisierung': 'wchar_t *' kann nicht in 'LPCSTR' konvertiert werden
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.
|
|
|
09/13/2009, 21:39
|
#5
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
PHP Code:
CString Text; LPCSTR buf; buf = (LPCSTR)Text.GetBuffer(); WritePrivateProfileStringA("test", "1", buf, "c:\\test.ini");
|
|
|
09/13/2009, 21:42
|
#6
|
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
|
Quote:
Originally Posted by Frezee
Wenn ich hier schon einen Thread zu den Strings erstelle, will ich gleich noch ein paar andere Frage loswerden:
Warum gibt es denn so viele verschiedene Typen von Strings, und wo liegen denn ihre Unterschiede?
Was ist genau der Unterschied zwischen ANSII und Unicode, und warum braucht man denn verschieden Zeichensätze?
|
Ich finde  auf der seite wird es sehr gut erklärt warum und wieso es verschiedene zeischensätze gibt.
Kurz gesagt der ASCII zeichensatz umfasst neben lateinischen buchstaben nur ein paar weitere soderzeichen. UNICODE stattdessen umfasst viele weitere zeichen.
|
|
|
09/13/2009, 21:53
|
#7
|
elite*gold: 99
Join Date: Oct 2008
Posts: 2,708
Received Thanks: 1,726
|
Quote:
Originally Posted by Adroxxx
PHP Code:
CString Text; LPCSTR buf; buf = (LPCSTR)Text.GetBuffer(); WritePrivateProfileStringA("test", "1", buf, "c:\\test.ini");
|
Thx Adroxxx, ich habe das Problem gerade entdeckt:
Es darf nicht so,
PHP Code:
CString Text = "";
sondern muss so heißen:
Das schreiben funktioniert auch, im Moment wird leider nur der erste Buchstabe geschrieben. Naja, das krieg ich schon noch hin.
€:
Quote:
Originally Posted by Akorn
Ich finde  auf der seite wird es sehr gut erklärt warum und wieso es verschiedene zeischensätze gibt.
Kurz gesagt der ASCII zeichensatz umfasst neben lateinischen buchstaben nur ein paar weitere soderzeichen mit den UNICODE kann man statt dessen
umfasst viele weitere zeichen.
|
Dankeschön, genau das habe ich gesucht.
|
|
|
09/13/2009, 21:58
|
#8
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Hast du dein Projekt in Unicode?
Weil bei mir geht es ohne Probleme.
PHP Code:
CString Text; Text.Format(_T("Bla")); LPCWSTR buf; buf = (LPCWSTR) Text.GetBuffer();
WritePrivateProfileString(_T("test"), _T("1"), buf, _T("c:\\test.ini")); Text.ReleaseBuffer();
und test.ini =
Quote:
btw. wenn MultiByte hast, lass die _T("") weg. Und halt LPCSTR anstatt LPCWSTR
Aber benutz WritePrivateProfileString und nicht WritePrivateProfileStringA.
Der Compiler benutzt automatisch das richtige
Bei Multibyte hats bei mir auch funktioniert.
|
|
|
09/13/2009, 21:58
|
#9
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
|
probier sonst mal
PHP Code:
CString Text[255];
weis leider nicht wies bei CString ist da ich damit nie arbeite :/
|
|
|
09/13/2009, 22:03
|
#10
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Quote:
Originally Posted by bloodx
probier sonst mal
PHP Code:
CString Text[255];
weis leider nicht wies bei CString ist da ich damit nie arbeite :/
|
ieh nein blödsinn.
|
|
|
09/13/2009, 22:04
|
#11
|
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
|
wäre jetzt nur ne lösung gewesen wegen dem einen Zeichen :P aber wie ich sehe hast du kurz vor mir schon ne lösung gepostet
|
|
|
09/13/2009, 22:08
|
#12
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Ja aber mein weg funktioniert. Habs gerade ausprobiert.
WritePrivateProfileString benutzten. Bei MultiByte LPCSTR bei Unicode LPCWSTR und _T("") benutzten.
Btw. falls auch eine Funktion zum lesen von ini datein brauchst:
PHP Code:
CString CBotEngine::sRead(CString strIniName, CString AppName, CString KeyName)
{
CString strBuf;
TCHAR cDic[BUFSIZE];
GetCurrentDirectoryW(BUFSIZE,cDic);
CString sDic = CString(cDic);
sDic.Format(_T("%s\\%s"),cDic,strIniName);
GetPrivateProfileString(AppName,KeyName,_T(""),strBuf.GetBuffer(254),254,sDic);
return strBuf;
}
Ist aus meiner CBotEngine  Link in der Signatur.
|
|
|
09/13/2009, 22:20
|
#13
|
elite*gold: 99
Join Date: Oct 2008
Posts: 2,708
Received Thanks: 1,726
|
Quote:
Originally Posted by Adroxxx
Hast du dein Projekt in Unicode?
Weil bei mir geht es ohne Probleme.
PHP Code:
CString Text; Text.Format(_T("Bla")); LPCWSTR buf; buf = (LPCWSTR) Text.GetBuffer();
WritePrivateProfileString(_T("test"), _T("1"), buf, _T("c:\\test.ini")); Text.ReleaseBuffer();
und test.ini =
btw. wenn MultiByte hast, lass die _T("") weg. Und halt LPCSTR anstatt LPCWSTR
Aber benutz WritePrivateProfileString und nicht WritePrivateProfileStringA.
Der Compiler benutzt automatisch das richtige
Bei Multibyte hats bei mir auch funktioniert.
|
Es funktioniert in Unicode wunderbar.
Bai Multibyte erscheint ein Error, mit dem ich überhaut nichts anfangen kann.
1>mt.exe : general error c101008a: Failed to save the updated manifest to the file ".\Debug\Vokabeltrainer.exe.embed.manifest". Falscher Parameter.
Habe _T() natürlich rausgenommen und statt LPCWSTR LPCSTR benutzt.
Aber es funktioniert jetzt ja schonmal in Unicode. Wenn du spontan ne Lösung auf das Problem kennst, kannste ja mal posten. Ansonsten ist es egal.
|
|
|
09/13/2009, 22:21
|
#14
|
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
|
Erstellen -> Projektmappe bereinigen -> Projektmappe neu erstellen -> Kompelieren.
|
|
|
 |
Similar Threads
|
Strings während game
09/07/2010 - S4 League - 8 Replies
kann man strings auch während dem game austauschen?
|
Komisches Strings hacken
07/31/2010 - S4 League - 9 Replies
Also ich verstehe nicht, warum man, wenn man zB. actor_default_hp_max mit actor_default_animation_move_speed ersetzt, gleich die 915 HP hat, aber bei damage_multiplier ersetzt gegen ray_maxdistance nicht one-hittet sondern der DMG ganz verschwindet. Was ist der Unterschied??
|
GWCA Source Konvertierung zu VB.NET / Convert to VB.NET (Support)
01/14/2010 - GW Exploits, Hacks, Bots, Tools & Macros - 7 Replies
Hallo an alle,
ich hab gestern mal die Grund Constants sowie den GWCA Commander komplett in VB.NET Konvertiert und funktioniert ohne Probleme. (außer die Funktionen wie z.b. MoveTo , UseSkill usw...)
Naja sagt halt mal bescheid was ihr davon haltet.
Und natürlich Viel Spass damit ! :handsdown:
FindWindow.vb = Damit man das Handle von Guildwars findet.
Form1.vb = Der GWCA Commander.
|
Read Strings from Aion
11/09/2009 - Aion - 0 Replies
I couldn't find anything about reading strings from Aion Memory when I had problems with mine.
Using Autoit3 and Nomad Memory, I was unable to get strings correctly.
I used Nomad's Memory read with type of "byte" and Then called this function on the return data. Aion uses Unicode for the GUI strings and I didn't see any way of converting Unicode Strings in Autoit. So I felt I'd share my little code snippet with the rest of you.
...
|
C# relationship between chars and strings
05/04/2008 - Conquer Online 2 - 2 Replies
I know that chars are wrappers around a string, but how would I declare an array able to change one of the characters in the string?
|
All times are GMT +1. The time now is 14:10.
|
|