system::string^^ konvertieren mit c.marshal_as



  • Hallo Community 🙂
    ich konvertiere mir ein c# String in ein const char*:

    const char* AssemblyUtilities::convertStringToChar(::System::String ^ pToConvert)
    {
    //...
    //...
    marshal_context c;
    return return c.marshal_as<const char*>(pToConvert);
    }
    

    leider bekomme ich nur Grütze zurück sprich der Pointer hat keine korrekten Werte mehr
    wenn ich es mit

    const char* AssemblyUtilities::convertStringToChar(::System::String ^ pToConvert)
    {
    //...
    //...
     marshal_context c;				
     std::string *test =new std::string(c.marshal_as<std::string>(pToConvert));
     return test->c_str();	
    }
    

    funktioniert es zwar wie es soll, ich habe jedoch nen Speicherloch,
    kann mir einer erklären wir man das richtig macht ?
    vielen dank



  • Der Zeiger ist den dem Augenblick, wo die Funktion zurückkommt nicht mehr gültig.

    Du musst entweder den String zuvor kopiert haben (z.B. mit "strdup") oder Du verwendest z.B: std::string.

    Beachte auch, dass bei der Konvertierung zu "char*" Daten verloren gehen können. Ich würde eher "wchar_t" bzw. std::wstring verwenden, wenn möglich.



  • ok
    vielen dank für die schnelle Antwort 🙂
    mfg


Anmelden zum Antworten