Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 14:08

  • Please register to post and access all features, it's quick, easy and FREE!

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.

Reply
 
Old   #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()
{
    
CEditpEdit = (CEdit*) GetDlgItemIDC_EDIT1 );
    
CString Text "";
    
pEdit->GetWindowTextText );
    
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
Frezee is offline  
Old 09/13/2009, 21:16   #2




 
bloodx's Avatar
 
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"); 
bloodx is offline  
Thanks
1 User
Old 09/13/2009, 21:21   #3

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
Quote:
Originally Posted by Frezee View Post
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()
{
    
CEditpEdit = (CEdit*) GetDlgItemIDC_EDIT1 );
    
CString Text "";
    
pEdit->GetWindowTextText );
    
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()
{
    
CEditpEdit = (CEdit*) GetDlgItemIDC_EDIT1 );
    
CString Text "";
    
pEdit->GetWindowTextText );
    
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.
Adroxxx is offline  
Thanks
1 User
Old 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 View Post
könntest ja mal probieren ->
PHP Code:
WritePrivateProfileStringA("test""1", (LPCSTR)Text"c:\\test.ini"); 
Quote:
Originally Posted by Adroxxx View Post
Versuch mal
PHP Code:
WritePrivateProfileStringA("test""1", (LPCSTR)Text"c:\\test.ini"); 
Oder:

PHP Code:
void CVokabeltrainerDlg::OnBnClickedButton1()
{
    
CEditpEdit = (CEdit*) GetDlgItemIDC_EDIT1 );
    
CString Text "";
    
pEdit->GetWindowTextText );
    
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.
Frezee is offline  
Old 09/13/2009, 21:39   #5

 
Adroxxx's Avatar
 
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"); 
Adroxxx is offline  
Thanks
1 User
Old 09/13/2009, 21:42   #6
 
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
Quote:
Originally Posted by Frezee View Post


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.
Akorn is offline  
Thanks
1 User
Old 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 View Post
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:
PHP Code:
CString Text
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 View Post
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.
Frezee is offline  
Old 09/13/2009, 21:58   #8

 
Adroxxx's Avatar
 
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 = (LPCWSTRText.GetBuffer();

        
WritePrivateProfileString(_T("test"), _T("1"), buf_T("c:\\test.ini"));
        
Text.ReleaseBuffer(); 
und test.ini =
Quote:
[test]
1=Bla
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.
Adroxxx is offline  
Thanks
1 User
Old 09/13/2009, 21:58   #9




 
bloodx's Avatar
 
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 :/
bloodx is offline  
Old 09/13/2009, 22:03   #10

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
Quote:
Originally Posted by bloodx View Post
probier sonst mal
PHP Code:
CString Text[255]; 
weis leider nicht wies bei CString ist da ich damit nie arbeite :/
ieh nein blödsinn.
Adroxxx is offline  
Old 09/13/2009, 22:04   #11




 
bloodx's Avatar
 
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
bloodx is offline  
Old 09/13/2009, 22:08   #12

 
Adroxxx's Avatar
 
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 strIniNameCString AppNameCString 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.
Adroxxx is offline  
Old 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 View Post
Hast du dein Projekt in Unicode?

Weil bei mir geht es ohne Probleme.

PHP Code:
CString Text;
        
Text.Format(_T("Bla"));
        
LPCWSTR buf;
    
        
buf = (LPCWSTRText.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.
Frezee is offline  
Old 09/13/2009, 22:21   #14

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,324
Erstellen -> Projektmappe bereinigen -> Projektmappe neu erstellen -> Kompelieren.
Adroxxx is offline  
Thanks
1 User
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.