Problem bei Stringweitergabe



  • 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. 😉



  • joa, eigentlich hätte ich gerne eine gui für mein c programm

    char Speicher_aaa[]="D:\\Teil1.aaa";
    char Speicher_bbb[]="D:\\Teil2.bbb";
    
    fopen_s(fs,Speicher_sys, "w");
    fprintf(fs,"blablablubb   und noch vielviel mehr\n");
    

    da die erstellten Dateien im selben Ordner sein müssen, habe ich über FolderBrowserDialog() einen Pfad, den ich um die Dateinamen erweitern möchte und dann einfach nur text in Dateien schreiben möchte...



  • error C2664: 'sysani': Konvertierung des Parameters 13 von 'wchar_t' in 'const wchar_t *' nicht möglich

    wchar_t Speicher_aaa=Convert::ToChar(textBox1->Text + "\\Teil.aaa");
    			wchar_t Speicher_bbb=Convert::ToChar(textBox1->Text + "\\Teil.bbb");
    

    soweit bin ich jetzt, so nah wie nie zuvor... jedoch find ich nix wegen kovertierung



  • neuer Versuch, neues Pech....

    diesmal wieder mit convert von System::string --> *char nach Jochen Kalmbachs Anleitung http://www.c-plusplus.net/forum/158664

    egal welche Variante ich bekomme nun mehrer hundert Fehler in der winbase.h

    1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winbase.h(4389) : error C2872: 'FILETIME': Mehrdeutiges Symbol
    1>        kann 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\windef.h(377) sein: _FILETIME FILETIME'
    1>        oder "c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::Runtime::InteropServices::FILETIME"
    1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winbase.h(4390) : error C2872: 'FILETIME': Mehrdeutiges Symbol
    1>        kann 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\windef.h(377) sein: _FILETIME FILETIME'
    .
    .
    .
    

    Aufruf

    //const char *Speicher_aaa=StringConvA(Convert::ToChar(textBox1->Text + "\\Teil1.aaa"));
    
    			std::string Speicher_aaa = marshal_as<std::string>(Convert::ToChar(textBox1->Text + "\\Teil1.aaa")); //später Speicher_aaa.c_str()
    
    			//const char *Speicher_bbb=StringConvA(Convert::ToChar(textBox1->Text + "\\Teil.bbb"));
    
    			std::string Speicher_bbb = marshal_as<std::string>(Convert::ToChar(textBox1->Text + "\\Teil.bbb"));
    

Anmelden zum Antworten