Problem bei Stringweitergabe
-
Das StringConvertA am Anfang lässt du weg.
Stattdessen uebergibst du direkt "textBox1->Text" an deine Funktion sysani
und zwar als const-Referenz.Referenz, weil du dann nicht mit Pointern arbeiten musst und eben auch keine Kopie der Variable anlegst und const weil du nicht vorhast, deinen Text in der Funktion zu ändern sondern ihn einfach nur benutzen willst.
void sysani( float a, float b, ... , const MEINE_STRING_KLASSE &text ) { MEINE_STRING_KLASSE speicher_aaa = text + "\\Teil1.aaa"; MEINE_STRING_KLASSE speicher_bbb = text + "\\Teil2.aaa"; char *filename = StringConvA( speicher_aaa ); FILE *fs = fopen( filename , "w" ); ... }
PS: wie MEINE_STRING_KLASSE in der MFC heißt musst du schon selber rausfinden. Ist eben die Stringklasse, auf der auch textBox1->Text basiert.
-
ein System::String ^
error C2440: 'Initialisierung': 'StringConvA' kann nicht in 'char *' konvertiert werden 1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
oh man...was ist denn da jetzt was und warum sind Buchstaben keine Buchstaben...das ist so zum brechen... C ist vielleicht uralt aber funktioniert wenigstens, da ist ein Buchstabe ein Buchstabe
-
Vergiss die Funktion... StringConvA. Das "^" hätte mich gleich stutzig machen müssen.
Das ist C# nicht C++...
Das braucht uns nicht wundern, dass der Compiler das nicht frisst
-
Du hast kein Konsolen-Programm in C geschrieben, sondern in C++/CLI! Das macht immer noch keinen Sinn:
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/
-
Ich vermute, er hat sich bei C++/CLI einfach nur verklickt. Er will schon C/C++...
Aber die Funktion, die er sich da rausgesucht hat, ist natürlich mitnichten für C++ geeignet
-
wie denn das jetzt ?
ich hab doch ein C++ Projekt gemacht...void sysani(....,const System::String ^Speicher) System::String ^Speicher_aaa= Speicher +"\\Teil.aaa"; char* filename = (char*)(void*)Marshal::StringToHGlobalAnsi(Speicher_aaa); fs = fopen(filename, "w");
so klappt das kompilieren, jedoch stimmen dann die \\ noch nicht und es kommt zum Fehler beim Ausführen
-
Jochen Kalmbach schrieb:
Du hast kein Konsolen-Programm in C geschrieben, sondern in C++/CLI! Das macht immer noch keinen Sinn:
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/die sysani ist mal ein konsolenprogramm gewesen...
-
tegg schrieb:
wie denn das jetzt ?
[cpp]void sysani(....,const **System::String ^**Speicher)
*System::String ^Speicher_aaa= Speicher +"\\Teil.aaa";
char filename = (char)(void)Marshal::StringToHGlobalAnsi(Speicher_aaa);
fs = fopen(filename, "w");
[/cpp]Die fettmarkierten Dinger sind aber C#-Code
-
muss ich jetzt die ganze klick-kacke neu zusammenbauen ? oder kann ich das irgendwie konvertieren ? Aber in meinen Eigenschaften ist es ein C/C++ Programm....
ich schreib jetzt mal den string in eine datei und schau mal was da rauskommt
-
tegg schrieb:
void sysani(....,const System::String ^Speicher) System::String ^Speicher_aaa= Speicher +"\\Teil.aaa"; char* filename = (char*)(void*)Marshal::StringToHGlobalAnsi(Speicher_aaa); fs = fopen(filename, "w");
so klappt das kompilieren
Also wenn er sowas "System::String ^" übersetzen kann, dann hast du höchstwahrscheinlich ein "C++/CLI" Projekt angelegt. Ich kenne mich zwar in der MFC nicht aus, aber ich habe so meine Zweifel, dass es dort diese Konstruktion "System::String ^" gibt...
Die Experten mögen mich korrigieren, wenn ich falsch liege.
-
hmm...also Problem ist die char *filname ist einfach nur ein "H"
-
Zeig mal deinen Code. Was hast du denn jetzt genau gemacht?
Edit: Welche Art von Projekt hast du denn jetzt erzeugt?
-
Es ist ein C++/CLI Projekt. Das sieht man an den Einstellungen: "Common Language Runtime Support": steht auf jedefall nicht auf "None"...
-
bin schon wieder weiter... bin jetzt bei converttochar im form1.h am probieren und ein char zu übergeben
es sollte ein CLR - Windows Form Anwendung sein
-
Jochen Kalmbach schrieb:
Es ist ein C++/CLI Projekt. Das sieht man an den Einstellungen: "Common Language Runtime Support": steht auf jedefall nicht auf "None"...
Reine MSIL CLR Unterstüzung /clr:pure
-
Wenn du CLR machst, dann bist du aber hier im MFC(C++)-Forum falsch
-
okay...stimmt, ich bin da noch neu in dem Gebiet, sorry...könnte mich bitte jemand verschieben
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn Du mit C++/CLI programmierst, benutze das .NET Framework - char Zeiger haben da meistens nichts zu suchen.
-
Evtl. solltest du sogar überlegen, C# zu programmieren...
Da du ja ganz offensichtlich noch nicht genau weißt was du willst, bist du frei in deinen Entscheidungen.