convert System::String to jstring

zu1u

Mitglied
hallo zusammen,
zunächst mal bin ich nicht sicher ob das thema nicht irgendwo in den .NET Bereich gehört.
Jedenfalls würde ich gerne im Rahmen von JNI einen System::String in einen jstring konvertieren.. wie der Titel bereits sagt.

Mit der mir bekannten
jstring js= globalEnv->NewStringUTF(string);
komme ich leider nicht weit.

kann mir jemand helfen?
 
danke, funktioniert aber leider nicht

Code:
1>.\jni.cpp(71) : error C2664: 'JNIEnv_::NewStringUTF' : cannot convert parameter 1 from 'cli::array<Type,dimension> ^' to 'const char *'
1>        with
1>        [
1>            Type=wchar_t,
1>            dimension=1
1>        ]
 
Ok.

C++:
#include <msclr\marshal.h>

using namespace msclr::interop;
...

globalEnv->NewStringUTF(marshal_as<const char*>(string));
Gruß
 
Code:
1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\msclr\marshal.h(203) : error C4996: 'msclr::interop::error_reporting_helper<_To_Type,_From_Type>::marshal_as': This conversion requires a marshal_context.  Please use a marshal_context for this conversion.
1>        with
1>        [
1>            _To_Type=const char *,
1>            _From_Type=System::String ^
1>        ]
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\msclr\marshal.h(194) : see declaration of 'msclr::interop::error_reporting_helper<_To_Type,_From_Type>::marshal_as'
1>        with
1>        [
1>            _To_Type=const char *,
1>            _From_Type=System::String ^
1>        ]
1>        .\fsw.cpp(75) : see reference to function template instantiation '_To_Type msclr::interop::marshal_as<const char*,System::String^>(const _From_Type &)' being compiled
1>        with
1>        [
1>            _To_Type=const char *,
1>            _From_Type=System::String ^
1>        ]

ging das bei dir denn?
und woher nimmst du die Infos? ich müsste nämlich auch die andere Richtung konvertieren :S
 
Zuletzt bearbeitet:
habs jetzt so gemacht.
Code:
char string[100] = "";
msclr::interop::marshal_context ctx;
const char* deststring1 = ctx.marshal_as<const char*>(str);
strcpy_s(string, deststring1);

jstring jstring_var = globalEnv->NewStringUTF(string);
return jstring_var;
jetzt muss ich nur noch einen Rückweg finden

Edit:
hab ich jetzt auch:
Code:
    const char* charStr = globalEnv->GetStringUTFChars(jstr, NULL);
    String ^text= gcnew String(charStr);
    return text;

..danke
 
Zuletzt bearbeitet:
Zurück