Stringübergabe von JAVA nach C++



  • Sorry, habe da was falsches geschrieben ( *rotwerd* )
    Es ist jetzt korrigiert.

    Parameter der MessageBox :
    MessageBox ( int hWind, String lpText, String lpCaption, int uType );

    Ich zähle eigentlich die Var. text hoch, es ist ein Pointer auf Char.
    Das habe ich aber nur gemacht, um zu sehen, wo das Problem liegt.
    Ich habe halt über das \n weitergelesen und sieh da : da war auch der restliche Tetx drin 🙂



  • Hi,
    hast du mal probiert des mit cout einfach auf der Konsole auszugeben?
    Nur um Fehler bei der Messagebox auszuschließen.
    Bist du sicher daß das \n und net \0 (C++ String-Ende-Zeichen) ist.

    Gruß Threaddy



  • Threaddy schrieb:

    Hi,
    hast du mal probiert des mit cout einfach auf der Konsole auszugeben?
    Nur um Fehler bei der Messagebox auszuschließen.

    Einen Fehler bei der MessageBox kann ich ausschliessen, denn
    das geht :

    char* text = "12345";
    MessageBox ( (  0, text, MB_OK, MB_ICONINFORMATION );
    

    Threaddy schrieb:

    Bist du sicher daß das \n und net \0 (C++ String-Ende-Zeichen) ist.

    Irgendiwie bin ich heute nicht gut drauf, ich meinte natürlich (C++ String-Ende-Zeichen), also \0 😕

    Gruss
    Alex



  • Hi AlexSnd,

    Java schickt Unicode (16-Bit) ab und du empfängst char (8-Bit).
    Daran liegt das. Denk dir was aus!

    Jockelx



  • Hm,
    stimmt. Des wird's wohl sein.
    Würde dann in java einfach n char[] draus machen.

    Gruß
    Threaddy



  • Threaddy schrieb:

    Würde dann in java einfach n char[] draus machen.

    Oder man benutzt einfach

    #define UNICODE
    

    Danke für Eure Geduld 😃



  • AlexSnd schrieb:

    Oder man benutzt einfach

    #define UNICODE
    

    Des kannt ich jetzt noch nicht. Wieder was gelernt 🙂
    Geh mal davon aus daß es jetzt funzt.

    Gruß Threaddy



  • Threaddy schrieb:

    Geh mal davon aus daß es jetzt funzt.

    Ja es funzt, Unicode muss eingeschaltet sein und der Text als LPCTSTR declariert werden.

    Gruss
    Alex



  • Hi,

    habe hier mal meinen alten Thread ausgegraben, weil ich wieder ein ähnliches Problem habe.

    Diesmal geht es aber um die Rückgabe eines String von C++ nach Java.
    Wie funktioniert das ? Ich habe schon viele Möglichkeiten probiert, aber bestenfalls kommt Mühl an, meisten schmiert das Programm ab 😞

    Danke
    Gruss
    Alex



  • PuppetMaster2k schrieb:

    C++ kennt std::string. Eine Klasse die das Äquvivalent zu String in Java darstellt 🙂

    Wenn schon std::wstring. Java Strings sind Unicode, und std::string ist es nicht.



  • @AlexSnd:

    Du musst das Ding irgendwie als byte[] in dein Java-Programm kriegen. Daraus kannst du dann den java.lang.String konstruieren, wenn du die Zeichenkodierung kennst.
    Wovon genau die Zeichenkodierung des std::strings abhängt, versuch ich noch rauszufinden. Wenn ich meinen Quelltext als UTF-8 abspeichere, hat der std::string für ein Ü zwei Zeichen. Also hängt es vielleicht von der Kodierung des Quelltexts ab und der C++-Compiler übernimmt einfach die Bytes, die so kommen. Wahrscheinlich ist UTF-8 dann die beste Wahl, ohne BOM müsste das auch ein dummer C++-Compiler bearbeiten können.

    Wenn du nen wstring hast, ist sowieso gar nichts mehr sicher, ne plattformunabhängige Lösung kriegst du dann nicht her. Beim VC++ wäre es ein UTF-16 String. Die Vorgehensweise in Java wäre die selbe, byte[] daraus machen und mit UTF-16 String erstellen. Ich würde nicht empfehlen, die 16-Bit chars direkt in Java unverändert zu übernehmen, weil Java die binäre 0 speziell kodiert.


Anmelden zum Antworten