Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ Strings/Zeichenketten an function übergeben (https://www.delphipraxis.net/179527-strings-zeichenketten-function-uebergeben.html)

EWeiss 12. Mär 2014 16:21

Strings/Zeichenketten an function übergeben
 
Das konvertieren in C++ ist ja noch schlimmer als in Delphi :)

Wie kann ich eine Zeichenkette an eine Funktion übergeben?

Code:
char *sTextColorPicker[MAX_COLORPICKER_STRINGS] =
{"Red",                   //0
"Green",                  //1
"Blue",                   //2
"ColorPicker",            //3
"Cancel",                 //4
};
Language.h
Code:
static CString sTextCPicker[MAX_COLORPICKER_STRINGS];
Language.cpp
Code:
CString CLanguage::sTextCPicker[MAX_COLORPICKER_STRINGS];
Code:
void CLanguage::XMLParse(const char* FileName, CString *sText, const char* Section)
{
 ....
  sText[entry] = buffer;            //error 9
  sText[entry].Replace("\\t", "\t"); //error 10
  sText[entry].Replace("\\n", "\n"); //error 11 ' Wenn Definition so ausgelegt   CString *sText[]
}
Code:
Lng->XMLParse(Lng->szTemp, sTextColorPicker[MAX_COLORPICKER_STRINGS], "Menu");
ES will irgendwo nicht egal was ich anpacke.

Zitat:

error C2664: 'CLanguage::XMLParse' : cannot convert parameter 2 from 'char *' to 'ATL::CString *'
Definiere ich sText> so CString *sText[] gibt es diese Fehler.. hmm ja muss noch lernen :)

Zitat:

Error 5 error C2664: 'CLanguage::XMLParse' : cannot convert parameter 2 from 'char *' to 'ATL::CString *[]'
Error 9 error C2440: '=' : cannot convert from 'char *' to 'ATL::CString *'
Error 10 error C2228: left of '.Replace' must have class/struct/Union
Error 11 error C2228: left of '.Replace' must have class/struct/Union
Stress pur!

gruss

EWeiss 12. Mär 2014 20:17

AW: Strings/Zeichenketten an function übergeben
 
ok hab es jetzt soweit

Code:
Lng->XMLParse(Lng->szTemp, (CString *)sTextSettingDialog, "SettingsDialog");

void CLanguage::XMLParse(const char* FileName, CString *sInText, const char* Section)
{

}
Allerdings bekomme ich bei sInText nur den ersten eintrag vom sTextSettingDialog

Was fehlt das die anderen 54 nicht übernommen werden?

gruss

BUG 12. Mär 2014 20:56

AW: Strings/Zeichenketten an function übergeben
 
Zitat:

Zitat von EWeiss (Beitrag 1251752)
Das konvertieren in C++ ist ja noch schlimmer als in Delphi :)

Mit ordentlichen Klassen kann man mit in C++ sehr sauber programmieren ... und was in Delphi mit Compilermagie klappt, lässt sich oft mit Templates oder/und überladenen Operatoren selbst implementieren, wenn man es nicht in seiner Lieblings-Bibliothek findet.

Zitat:

Zitat von EWeiss (Beitrag 1251752)
Code:
CLanguage::XMLParse(const char* FileName, CString *sInText, const char* Section)

Merkwürdiges Konstrukt, insbesondere wenn man die CString Semantik gelesen hat:
Zitat:

Even though CString objects are dynamic objects that can grow, they act like built-in primitive types and simple classes. Each CString object represents a unique value. CString objects should be thought of as the actual strings rather than as pointers to strings.
Im Klartext: CStrings verhalten sich (ungefähr) wie Strings in Delphi, es gibt keinen Grund mit irgendwelchen Zeigern rumzuhantieren.

Hier findest du eine Übersicht der Konstruktoren von CStringT, einer Verallgemeinerung von CString. Zu beachten sind die, welche pszSrc als Parameter bekommen. Dem Code nach können alle diese Stringtypen implizit in CStrings kopiert werden, ansonsten kann man es mit CString("OMG ein String!") auch explizit hinschreiben.


Ansonsten fehlt mir irgendwie der Überblick, was du überhaupt erreichen willst :mrgreen:

EWeiss 12. Mär 2014 21:18

AW: Strings/Zeichenketten an function übergeben
 
Erst mal Danke das du überhaupt mal draufgeschaut hast.

Zitat:

Ansonsten fehlt mir irgendwie der Überblick, was du überhaupt erreichen willst
Ich habe oben ein Array of strings oder wie auch immer das in C++ ausgelegt wird.

In Delphi würde ich sage ist das ne Type ala
Delphi-Quellcode:
  TPlayState   = (psError = -1, psStop = 0, psPlay = 1,
                   psIsPlaying = 2, psPause= 3,
                   psPrevTitle = 4, psNextTitle = 5,
                   psSetPlaylistTitle = 6, psGetPlaylistTitlePos = 7,
                   psSetPlaylistPos = 8, psGetSelectedTitlePos = 9,
                   psPlaylistClear = 10, psAddPlaylistTitle = 11);
Ich will jetzt nichts anderes als
Zitat:

char *sTextColorPicker[MAX_COLORPICKER_STRINGS]
an meine Function übergeben damit ich nicht in jeder Form die gleiche Function zum parsen einfügen muss.
Mein Ansatz also die Konvertierung läuft ja allerdings bekomme ich nur den ersten Eintrag übergeben

sInText entält nur den ersten Eintrag also wie im Beispiel "Red"

gruss

EWeiss 12. Mär 2014 21:53

AW: Strings/Zeichenketten an function übergeben
 
changed..

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz